diff --git a/gui/slick/views/apiBuilder.mako b/gui/slick/views/apiBuilder.mako
index a1aa2b7ae2f6c80dec14c4ddaa3ccb79fe8a34e0..b889ded427f5531013ac05c471bfd8aafbad23de 100644
--- a/gui/slick/views/apiBuilder.mako
+++ b/gui/slick/views/apiBuilder.mako
@@ -85,10 +85,10 @@
         <div class="collapse navbar-collapse" id="nav-collapsed">
             <div class="btn-group navbar-btn" data-toggle="buttons">
                 <label class="btn btn-primary">
-                    <input autocomplete="off" id="option-profile" type="checkbox" /> Profile
+                    <input autocomplete="off" id="option-profile" type="checkbox"  autocapitalize="off" /> Profile
                 </label>
                 <label class="btn btn-primary">
-                    <input autocomplete="off" id="option-jsonp" type="checkbox" /> JSONP
+                    <input autocomplete="off" id="option-jsonp" type="checkbox"  autocapitalize="off" /> JSONP
                 </label>
             </div>
 
@@ -103,7 +103,7 @@
 
             <form class="navbar-form navbar-right">
                 <div class="form-group">
-                    <input autocomplete="off" class="form-control" id="command-search" placeholder="Command name" type="search"/>
+                    <input autocomplete="off" class="form-control" id="command-search" placeholder="Command name" type="search" autocapitalize="off" />
                 </div>
             </form>
         </div>
@@ -213,7 +213,7 @@ var episodes = ${episodes};
         <td>${parameter_help['desc'] if 'desc' in parameter_help else ''}</td>
         <td>${parameter_help['type'] if 'type' in parameter_help else ''}</td>
         <td>${parameter_help['defaultValue'] if 'defaultValue' in parameter_help else ''}</td>
-        <td>${parameter_help['allowedValues'] if 'allowedValues' in parameter_help else ''}</td>
+        <td>${parameter_help['allowed_values'] if 'allowed_values' in parameter_help else ''}</td>
     </tr>
 % endfor
 </tbody>
@@ -224,7 +224,7 @@ var episodes = ${episodes};
     % for parameter in parameters:
     <%
         parameter_help = parameters[parameter]
-        allowed_values = parameter_help['allowedValues'] if 'allowedValues' in parameter_help else ''
+        allowed_values = parameter_help['allowed_values'] if 'allowed_values' in parameter_help else ''
         type = parameter_help['type'] if 'type' in parameter_help else ''
     %>
 
@@ -271,10 +271,10 @@ var episodes = ${episodes};
         </select>
     % elif type == 'int':
         % if parameter not in ('episode', 'season'):
-        <input class="form-control" name="${parameter}" placeholder="${parameter}" type="number" data-command="${command}" />
+        <input class="form-control" name="${parameter}" placeholder="${parameter}" type="number" data-command="${command}"  autocapitalize="off" />
         % endif
     % elif type == 'string':
-        <input class="form-control" name="${parameter}" placeholder="${parameter}" type="text" data-command="${command}" />
+        <input class="form-control" name="${parameter}" placeholder="${parameter}" type="text" data-command="${command}"  autocapitalize="off" />
     % endif
 % endfor
 </div>
diff --git a/gui/slick/views/config_anime.mako b/gui/slick/views/config_anime.mako
index d006a14999b465671f1074ce49a58253d13848f2..f4595aae2a0c18b070ee13178153f9362d857098 100644
--- a/gui/slick/views/config_anime.mako
+++ b/gui/slick/views/config_anime.mako
@@ -27,7 +27,7 @@
 
                     <fieldset class="component-group-list">
                         <div class="field-pair">
-                            <input type="checkbox" class="enabler" name="use_anidb" id="use_anidb" ${('', 'checked="checked"')[bool(sickbeard.USE_ANIDB)]} />
+                            <input type="checkbox" class="enabler" name="use_anidb" id="use_anidb" ${('', 'checked="checked"')[bool(sickbeard.USE_ANIDB)]}  autocapitalize="off" />
                             <label for="use_notifo">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">Should SickRage use data from AniDB?</span>
@@ -38,7 +38,7 @@
                             <div class="field-pair">
                                 <label class="nocheck">
                                     <span class="component-title">AniDB Username</span>
-                                    <input type="text" name="anidb_username" id="anidb_username" value="${sickbeard.ANIDB_USERNAME}" class="form-control input-sm input350" />
+                                    <input type="text" name="anidb_username" id="anidb_username" value="${sickbeard.ANIDB_USERNAME}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </label>
                                 <label class="nocheck">
                                     <span class="component-title">&nbsp;</span>
@@ -49,7 +49,7 @@
                             <div class="field-pair">
                                 <label class="nocheck">
                                     <span class="component-title">AniDB Password</span>
-                                    <input type="password" name="anidb_password" id="anidb_password" value="${sickbeard.ANIDB_PASSWORD}" class="form-control input-sm input350" />
+                                    <input type="password" name="anidb_password" id="anidb_password" value="${sickbeard.ANIDB_PASSWORD}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </label>
                                 <label class="nocheck">
                                     <span class="component-title">&nbsp;</span>
@@ -57,14 +57,14 @@
                                 </label>
                             </div>
                             <div class="field-pair">
-                                <input type="checkbox" name="anidb_use_mylist" id="anidb_use_mylist" ${('', 'checked="checked"')[bool(sickbeard.ANIDB_USE_MYLIST)]}/>
+                                <input type="checkbox" name="anidb_use_mylist" id="anidb_use_mylist" ${('', 'checked="checked"')[bool(sickbeard.ANIDB_USE_MYLIST)]} autocapitalize="off" />
                                 <label>
                                     <span class="component-title">AniDB MyList</span>
                                     <span class="component-desc">Do you want to add the PostProcessed Episodes to the MyList ?</span>
                                 </label>
                             </div>
                         </div>
-                        <input type="submit" class="btn config_submitter" value="Save Changes" />
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
                     </fieldset>
 
                 </div><!-- /component-group //-->
@@ -76,17 +76,17 @@
                     </div>
                     <fieldset class="component-group-list">
                         <div class="field-pair">
-                            <input type="checkbox" class="enabler" name="split_home" id="split_home" ${('', 'checked="checked"')[bool(sickbeard.ANIME_SPLIT_HOME)]}/>
+                            <input type="checkbox" class="enabler" name="split_home" id="split_home" ${('', 'checked="checked"')[bool(sickbeard.ANIME_SPLIT_HOME)]} autocapitalize="off" />
                             <label for="use_notifo">
                                 <span class="component-title">Split show lists</span>
                                 <span class="component-desc">Separate anime and normal shows in groups</span>
                             </label>
                         </div>
-                        <input type="submit" class="btn config_submitter" value="Save Changes" />
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
                    </fieldset>
                 </div><!-- /component-group //-->
 
-                <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                <br><input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
 
             </div><!-- /config-components //-->
 
diff --git a/gui/slick/views/config_backuprestore.mako b/gui/slick/views/config_backuprestore.mako
index a93bcc664cadbbb9f38bfb3dd0bd9e8b4f101a8a..4374943bd71b04a2df98582c573ccc8e2247e91f 100644
--- a/gui/slick/views/config_backuprestore.mako
+++ b/gui/slick/views/config_backuprestore.mako
@@ -43,8 +43,8 @@
 
                             <br><br>
 
-                            <input type="text" name="backupDir" id="backupDir" class="form-control input-sm input350" />
-                            <input class="btn btn-inline" type="button" value="Backup" id="Backup" />
+                            <input type="text" name="backupDir" id="backupDir" class="form-control input-sm input350"  autocapitalize="off" />
+                            <input class="btn btn-inline" type="button" value="Backup" id="Backup"  autocapitalize="off" />
 
                             <br>
 
@@ -66,8 +66,8 @@
 
                             <br><br>
 
-                            <input type="text" name="backupFile" id="backupFile" class="form-control input-sm input350" />
-                            <input class="btn btn-inline" type="button" value="Restore" id="Restore" />
+                            <input type="text" name="backupFile" id="backupFile" class="form-control input-sm input350"  autocapitalize="off" />
+                            <input class="btn btn-inline" type="button" value="Restore" id="Restore"  autocapitalize="off" />
 
                             <br>
 
diff --git a/gui/slick/views/config_general.mako b/gui/slick/views/config_general.mako
index d0f4f429b2561ed9432430f5bf201600fa2790fc..db9c0a10f629b4c8e43b9212d4cb1265c228d6ab 100644
--- a/gui/slick/views/config_general.mako
+++ b/gui/slick/views/config_general.mako
@@ -62,7 +62,7 @@
                             <label for="launch_browser">
                                 <span class="component-title">Launch browser</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="launch_browser" id="launch_browser" ${('', 'checked="checked"')[bool(sickbeard.LAUNCH_BROWSER)]}/>
+                                    <input type="checkbox" name="launch_browser" id="launch_browser" ${('', 'checked="checked"')[bool(sickbeard.LAUNCH_BROWSER)]} autocapitalize="off" />
                                     <p>open the SickRage home page on startup</p>
                                 </span>
                             </label>
@@ -86,7 +86,7 @@
                             <label for="showupdate_hour">
                                 <span class="component-title">When to update shows</span>
                                 <span class="component-desc">
-                                    <input type="text" name="showupdate_hour" id="showupdate_hour" value="${sickbeard.SHOWUPDATE_HOUR}" class="form-control input-sm input75" />
+                                    <input type="text" name="showupdate_hour" id="showupdate_hour" value="${sickbeard.SHOWUPDATE_HOUR}" class="form-control input-sm input75"  autocapitalize="off" />
                                     <p>with information such as next air dates, show ended, etc. Use 15 for 3pm, 4 for 4am etc. Anything over 23 or under 0 will be set to 0 (12am)</p>
                                 </span>
                             </label>
@@ -96,11 +96,11 @@
                             <span class="component-title">Send to trash for actions</span>
                             <span class="component-desc">
                                 <label for="trash_remove_show" class="nextline-block">
-                                    <input type="checkbox" name="trash_remove_show" id="trash_remove_show" ${('', 'checked="checked"')[bool(sickbeard.TRASH_REMOVE_SHOW)]}/>
+                                    <input type="checkbox" name="trash_remove_show" id="trash_remove_show" ${('', 'checked="checked"')[bool(sickbeard.TRASH_REMOVE_SHOW)]} autocapitalize="off" />
                                     <p>when using show "Remove" and delete files</p>
                                 </label>
                                 <label for="trash_rotate_logs" class="nextline-block">
-                                    <input type="checkbox" name="trash_rotate_logs" id="trash_rotate_logs" ${('', 'checked="checked"')[bool(sickbeard.TRASH_ROTATE_LOGS)]}/>
+                                    <input type="checkbox" name="trash_rotate_logs" id="trash_rotate_logs" ${('', 'checked="checked"')[bool(sickbeard.TRASH_ROTATE_LOGS)]} autocapitalize="off" />
                                     <p>on scheduled deletes of the oldest log files</p>
                                 </label>
                                 <div class="clear-left"><p>selected actions use trash (recycle bin) instead of the default permanent delete</p></div>
@@ -111,7 +111,7 @@
                             <label for="log_dir">
                                 <span class="component-title">Log file folder location</span>
                                 <span class="component-desc">
-                                    <input type="text" name="log_dir" id="log_dir" value="${sickbeard.ACTUAL_LOG_DIR}" class="form-control input-sm input350" />
+                                    <input type="text" name="log_dir" id="log_dir" value="${sickbeard.ACTUAL_LOG_DIR}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -120,7 +120,7 @@
                             <label for="log_nr">
                                 <span class="component-title">Number of Log files saved</span>
                                 <span class="component-desc">
-                                    <input type="text" name="log_nr" id="log_nr" value="${sickbeard.LOG_NR}" class="form-control input-sm input75" />
+                                    <input type="text" name="log_nr" id="log_nr" value="${sickbeard.LOG_NR}" class="form-control input-sm input75"  autocapitalize="off" />
                                     <p>number of log files saved when rotating logs (default: 5) (REQUIRES RESTART)</p>
                                 </span>
                             </label>
@@ -130,7 +130,7 @@
                             <label for="log_size">
                                 <span class="component-title">Size of Log files saved</span>
                                 <span class="component-desc">
-                                    <input type="text" name="log_size" id="log_size" value="${sickbeard.LOG_SIZE}" class="form-control input-sm input75" />
+                                    <input type="text" name="log_size" id="log_size" value="${sickbeard.LOG_SIZE}" class="form-control input-sm input75"  autocapitalize="off" />
                                     <p>maximum size of a log file saved (default: 1048576 (1MB)) (REQUIRES RESTART)</p>
                                 </span>
                             </label>
@@ -155,7 +155,7 @@
                             <label for="indexer_timeout">
                                 <span class="component-title">Timeout show indexer at</span>
                                 <span class="component-desc">
-                                    <input type="text" name="indexer_timeout" id="indexer_timeout" value="${sickbeard.INDEXER_TIMEOUT}" class="form-control input-sm input75" />
+                                    <input type="text" name="indexer_timeout" id="indexer_timeout" value="${sickbeard.INDEXER_TIMEOUT}" class="form-control input-sm input75"  autocapitalize="off" />
                                     <p>seconds of inactivity when finding new shows (default:10)</p>
                                 </span>
                             </label>
@@ -171,7 +171,7 @@
                             </label>
                         </div>
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" />
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
                     </fieldset>
                 </div>
                 <div class="component-group">
@@ -186,7 +186,7 @@
                             <label for="version_notify">
                                 <span class="component-title">Check software updates</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="version_notify" id="version_notify" ${('', 'checked="checked"')[bool(sickbeard.VERSION_NOTIFY)]}/>
+                                    <input type="checkbox" name="version_notify" id="version_notify" ${('', 'checked="checked"')[bool(sickbeard.VERSION_NOTIFY)]} autocapitalize="off" />
                                     <p>and display notifications when updates are available.
                                     Checks are run on startup and at the frequency set below*</p>
                                 </span>
@@ -197,7 +197,7 @@
                             <label for="auto_update">
                                 <span class="component-title">Automatically update</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="auto_update" id="auto_update" ${('', 'checked="checked"')[bool(sickbeard.AUTO_UPDATE)]}/>
+                                    <input type="checkbox" name="auto_update" id="auto_update" ${('', 'checked="checked"')[bool(sickbeard.AUTO_UPDATE)]} autocapitalize="off" />
                                     <p>fetch and install software updates.
                                     Updates are run on startup and in the background at the frequency set below*</p>
                                 </span>
@@ -208,7 +208,7 @@
                             <label>
                                 <span class="component-title">Check the server every*</span>
                                 <span class="component-desc">
-                                    <input type="text" name="update_frequency" id="update_frequency" value="${sickbeard.UPDATE_FREQUENCY}" class="form-control input-sm input75" />
+                                    <input type="text" name="update_frequency" id="update_frequency" value="${sickbeard.UPDATE_FREQUENCY}" class="form-control input-sm input75"  autocapitalize="off" />
                                     <p>hours for software updates (default:12)</p>
                                 </span>
                             </label>
@@ -218,13 +218,13 @@
                             <label for="notify_on_update">
                                 <span class="component-title">Notify on software update</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="notify_on_update" id="notify_on_update" ${('', 'checked="checked"')[bool(sickbeard.NOTIFY_ON_UPDATE)]}/>
+                                    <input type="checkbox" name="notify_on_update" id="notify_on_update" ${('', 'checked="checked"')[bool(sickbeard.NOTIFY_ON_UPDATE)]} autocapitalize="off" />
                                     <p>send a message to all enabled notifiers when SickRage has been updated</p>
                                 </span>
                             </label>
                         </div>
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" />
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
                     </fieldset>
 
                 </div>
@@ -266,7 +266,7 @@
                             <label for="sort_article">
                                 <span class="component-title">Sort with "The", "A", "An"</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="sort_article" id="sort_article" ${('', 'checked="checked"')[bool(sickbeard.SORT_ARTICLE)]}/>
+                                    <input type="checkbox" name="sort_article" id="sort_article" ${('', 'checked="checked"')[bool(sickbeard.SORT_ARTICLE)]} autocapitalize="off" />
                                     <p>include articles ("The", "A", "An") when sorting show lists</p>
                                 </span>
                             </label>
@@ -275,7 +275,7 @@
                             <label for="coming_eps_missed_range">
                                 <span class="component-title">Missed episodes range</span>
                                 <span class="component-desc">
-                                    <input type="number" step="1" min="7" name="coming_eps_missed_range" id="coming_eps_missed_range" value="${sickbeard.COMING_EPS_MISSED_RANGE}" class="form-control input-sm input75" />
+                                    <input type="number" step="1" min="7" name="coming_eps_missed_range" id="coming_eps_missed_range" value="${sickbeard.COMING_EPS_MISSED_RANGE}" class="form-control input-sm input75"  autocapitalize="off" />
                                     <p>Set the range in days of the missed episodes in the Schedule page</p>
                                 </span>
                             </label>
@@ -284,7 +284,7 @@
                             <label for="fuzzy_dating">
                                 <span class="component-title">Display fuzzy dates</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="fuzzy_dating" id="fuzzy_dating" class="viewIf datePresets" ${('', 'checked="checked"')[bool(sickbeard.FUZZY_DATING)]}/>
+                                    <input type="checkbox" name="fuzzy_dating" id="fuzzy_dating" class="viewIf datePresets" ${('', 'checked="checked"')[bool(sickbeard.FUZZY_DATING)]} autocapitalize="off" />
                                     <p>move absolute dates into tooltips and display e.g. "Last Thu", "On Tue"</p>
                                 </span>
                             </label>
@@ -293,7 +293,7 @@
                             <label for="trim_zero">
                                 <span class="component-title">Trim zero padding</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="trim_zero" id="trim_zero" ${('', 'checked="checked"')[bool(sickbeard.TRIM_ZERO)]}/>
+                                    <input type="checkbox" name="trim_zero" id="trim_zero" ${('', 'checked="checked"')[bool(sickbeard.TRIM_ZERO)]} autocapitalize="off" />
                                     <p>remove the leading number "0" shown on hour of day, and date of month</p>
                                 </span>
                             </label>
@@ -336,10 +336,10 @@
                             <span class="component-title">Timezone:</span>
                             <span class="component-desc">
                                 <label for="local" class="space-right">
-                                    <input type="radio" name="timezone_display" id="local" value="local" ${('', 'checked="checked"')[sickbeard.TIMEZONE_DISPLAY == "local"]} />Local
+                                    <input type="radio" name="timezone_display" id="local" value="local" ${('', 'checked="checked"')[sickbeard.TIMEZONE_DISPLAY == "local"]}  autocapitalize="off" />Local
                                 </label>
                                 <label for="network">
-                                    <input type="radio" name="timezone_display" id="network" value="network" ${('', 'checked="checked"')[sickbeard.TIMEZONE_DISPLAY == "network"]} />Network
+                                    <input type="radio" name="timezone_display" id="network" value="network" ${('', 'checked="checked"')[sickbeard.TIMEZONE_DISPLAY == "network"]}  autocapitalize="off" />Network
                                 </label>
                                 <div class="clear-left">
                                 <p>display dates and times in either your timezone or the shows network timezone</p>
@@ -353,7 +353,7 @@
                         <div class="field-pair">
                             <label for="download_url">
                                 <span class="component-title">Download url</span>
-                                <input type="text" name="download_url" id="download_url" value="${sickbeard.DOWNLOAD_URL}" size="35" />
+                                <input type="text" name="download_url" id="download_url" value="${sickbeard.DOWNLOAD_URL}" size="35"  autocapitalize="off" />
                             </label>
                             <label>
                                 <span class="component-title">&nbsp;</span>
@@ -362,7 +362,7 @@
                         </div>
 
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" />
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
 
                     </fieldset>
 
@@ -382,7 +382,7 @@
                             <label for="api_key">
                                 <span class="component-title">API key</span>
                                 <span class="component-desc">
-                                    <input type="text" name="api_key" id="api_key" value="${sickbeard.API_KEY}" class="form-control input-sm input300" readonly="readonly" />
+                                    <input type="text" name="api_key" id="api_key" value="${sickbeard.API_KEY}" class="form-control input-sm input300" readonly="readonly"  autocapitalize="off" />
                                     <input class="btn btn-inline" type="button" id="generate_new_apikey" value="Generate">
                                     <div class="clear-left">
                                         <p>used to give 3rd party programs limited access to SickRage</p>
@@ -396,7 +396,7 @@
                             <label for="web_log">
                                 <span class="component-title">HTTP logs</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="web_log" id="web_log" ${('', 'checked="checked"')[bool(sickbeard.WEB_LOG)]}/>
+                                    <input type="checkbox" name="web_log" id="web_log" ${('', 'checked="checked"')[bool(sickbeard.WEB_LOG)]} autocapitalize="off" />
                                     <p>enable logs from the internal Tornado web server</p>
                                 </span>
                             </label>
@@ -406,7 +406,7 @@
                             <label for="web_username">
                                 <span class="component-title">HTTP username</span>
                                 <span class="component-desc">
-                                    <input type="text" name="web_username" id="web_username" value="${sickbeard.WEB_USERNAME}" class="form-control input-sm input300" />
+                                    <input type="text" name="web_username" id="web_username" value="${sickbeard.WEB_USERNAME}" class="form-control input-sm input300"  autocapitalize="off" />
                                     <p>set blank for no login</p>
                                 </span>
                             </label>
@@ -416,7 +416,7 @@
                             <label for="web_password">
                                 <span class="component-title">HTTP password</span>
                                 <span class="component-desc">
-                                    <input type="password" name="web_password" id="web_password" value="${sickbeard.WEB_PASSWORD}" class="form-control input-sm input300" />
+                                    <input type="password" name="web_password" id="web_password" value="${sickbeard.WEB_PASSWORD}" class="form-control input-sm input300"  autocapitalize="off" />
                                     <p>blank = no authentication</span>
                             </label>
                         </div>
@@ -425,7 +425,7 @@
                             <label for="web_port">
                                 <span class="component-title">HTTP port</span>
                                 <span class="component-desc">
-                                    <input type="text" name="web_port" id="web_port" value="${sickbeard.WEB_PORT}" class="form-control input-sm input100" />
+                                    <input type="text" name="web_port" id="web_port" value="${sickbeard.WEB_PORT}" class="form-control input-sm input100"  autocapitalize="off" />
                                     <p>web port to browse and access SickRage (default:8081)</p>
                                 </span>
                             </label>
@@ -435,7 +435,7 @@
                             <label for="web_ipv6">
                                 <span class="component-title">Listen on IPv6</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="web_ipv6" id="web_ipv6" ${('', 'checked="checked"')[bool(sickbeard.WEB_IPV6)]}/>
+                                    <input type="checkbox" name="web_ipv6" id="web_ipv6" ${('', 'checked="checked"')[bool(sickbeard.WEB_IPV6)]} autocapitalize="off" />
                                     <p>attempt binding to any available IPv6 address</p>
                                 </span>
                             </label>
@@ -445,7 +445,7 @@
                             <label for="enable_https">
                                 <span class="component-title">Enable HTTPS</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="enable_https" class="enabler" id="enable_https" ${('', 'checked="checked"')[bool(sickbeard.ENABLE_HTTPS)]}/>
+                                    <input type="checkbox" name="enable_https" class="enabler" id="enable_https" ${('', 'checked="checked"')[bool(sickbeard.ENABLE_HTTPS)]} autocapitalize="off" />
                                     <p>enable access to the web interface using a HTTPS address</p>
                                 </span>
                             </label>
@@ -455,7 +455,7 @@
                                 <label for="https_cert">
                                     <span class="component-title">HTTPS certificate</span>
                                     <span class="component-desc">
-                                        <input type="text" name="https_cert" id="https_cert" value="${sickbeard.HTTPS_CERT}" class="form-control input-sm input300" />
+                                        <input type="text" name="https_cert" id="https_cert" value="${sickbeard.HTTPS_CERT}" class="form-control input-sm input300"  autocapitalize="off" />
                                         <div class="clear-left"><p>file name or path to HTTPS certificate</p></div>
                                     </span>
                                 </label>
@@ -464,7 +464,7 @@
                                 <label for="https_key">
                                     <span class="component-title">HTTPS key</span>
                                     <span class="component-desc">
-                                        <input type="text" name="https_key" id="https_key" value="${sickbeard.HTTPS_KEY}" class="form-control input-sm input300" />
+                                        <input type="text" name="https_key" id="https_key" value="${sickbeard.HTTPS_KEY}" class="form-control input-sm input300"  autocapitalize="off" />
                                         <div class="clear-left"><p>file name or path to HTTPS key</p></div>
                                     </span>
                                 </label>
@@ -475,13 +475,13 @@
                             <label for="handle_reverse_proxy">
                                 <span class="component-title">Reverse proxy headers</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="handle_reverse_proxy" id="handle_reverse_proxy" ${('', 'checked="checked"')[bool(sickbeard.HANDLE_REVERSE_PROXY)]}/>
+                                    <input type="checkbox" name="handle_reverse_proxy" id="handle_reverse_proxy" ${('', 'checked="checked"')[bool(sickbeard.HANDLE_REVERSE_PROXY)]} autocapitalize="off" />
                                     <p>accept the following reverse proxy headers (advanced)...<br>(X-Forwarded-For, X-Forwarded-Host, and X-Forwarded-Proto)</p>
                                 </span>
                             </label>
                         </div>
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" />
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
 
                     </fieldset>
 
@@ -517,7 +517,7 @@
                             <label>
                                 <span class="component-title">Anonymous redirect</span>
                                 <span class="component-desc">
-                                    <input type="text" name="anon_redirect" value="${sickbeard.ANON_REDIRECT}" class="form-control input-sm input300" />
+                                    <input type="text" name="anon_redirect" value="${sickbeard.ANON_REDIRECT}" class="form-control input-sm input300"  autocapitalize="off" />
                                     <div class="clear-left"><p>backlink protection via anonymizer service, must end in "?"</p></div>
                                 </span>
                             </label>
@@ -527,7 +527,7 @@
                             <label for="debug">
                                 <span class="component-title">Enable debug</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="debug" id="debug" ${('', 'checked="checked"')[bool(sickbeard.DEBUG)]}/>
+                                    <input type="checkbox" name="debug" id="debug" ${('', 'checked="checked"')[bool(sickbeard.DEBUG)]} autocapitalize="off" />
                                     <p>Enable debug logs<p>
                                 </span>
                             </label>
@@ -537,8 +537,8 @@
                             <label for="ssl_verify">
                                 <span class="component-title">Verify SSL Certs</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="ssl_verify" id="ssl_verify" ${('', 'checked="checked"')[bool(sickbeard.SSL_VERIFY)]}/>
-                                        <p>Verify SSL Certificates (Disable this for broken SSL installs (Like QNAP)<p>
+                                        <input type="checkbox" name="ssl_verify" id="ssl_verify" ${('', 'checked="checked"')[bool(sickbeard.SSL_VERIFY)]} autocapitalize="off" />
+                                        <p>Verify SSL Certificates (Disable this for broken SSL installs (Like QNAP))<p>
                                     </span>
                             </label>
                         </div>
@@ -547,7 +547,7 @@
                             <label for="no_restart">
                                 <span class="component-title">No Restart</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="no_restart" id="no_restart" ${('', 'checked="checked"')[bool(sickbeard.NO_RESTART)]}/>
+                                    <input type="checkbox" name="no_restart" id="no_restart" ${('', 'checked="checked"')[bool(sickbeard.NO_RESTART)]} autocapitalize="off" />
                                     <p>Only shutdown when restarting SR.
                                     Only select this when you have external software restarting SR automatically when it stops (like FireDaemon)</p>
                                 </span>
@@ -559,7 +559,7 @@
                             <label for="encryption_version">
                                 <span class="component-title">Encrypt passwords</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="encryption_version" id="encryption_version" ${('', 'checked="checked"')[bool(sickbeard.ENCRYPTION_VERSION)]}/>
+                                    <input type="checkbox" name="encryption_version" id="encryption_version" ${('', 'checked="checked"')[bool(sickbeard.ENCRYPTION_VERSION)]} autocapitalize="off" />
                                     <p>in the <code>config.ini</code> file.
                                     <b>Warning:</b> Passwords must only contain <a target="_blank" href="${anon_url('http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters')}">ASCII characters</a></p>
                                 </span>
@@ -570,7 +570,7 @@
                             <label for="calendar_unprotected">
                                 <span class="component-title">Unprotected calendar</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="calendar_unprotected" id="calendar_unprotected" ${('', 'checked="checked"')[bool(sickbeard.CALENDAR_UNPROTECTED)]}/>
+                                    <input type="checkbox" name="calendar_unprotected" id="calendar_unprotected" ${('', 'checked="checked"')[bool(sickbeard.CALENDAR_UNPROTECTED)]} autocapitalize="off" />
                                     <p>allow subscribing to the calendar without user and password.
                                     Some services like Google Calendar only work this way</p>
                                 </span>
@@ -582,7 +582,7 @@
                             <label for="calendar_icons">
                                 <span class="component-title">Google Calendar Icons</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="calendar_icons" id="calendar_icons" ${('', 'checked="checked"')[bool(sickbeard.CALENDAR_ICONS)]}/>
+                                    <input type="checkbox" name="calendar_icons" id="calendar_icons" ${('', 'checked="checked"')[bool(sickbeard.CALENDAR_ICONS)]} autocapitalize="off" />
                                     <p>show an icon next to exported calendar events in Google Calendar.</p>
                                 </span>
 
@@ -593,7 +593,7 @@
                             <label>
                                 <span class="component-title">Proxy host</span>
                                 <span class="component-desc">
-                                    <input type="text" name="proxy_setting" value="${sickbeard.PROXY_SETTING}" class="form-control input-sm input300" />
+                                    <input type="text" name="proxy_setting" value="${sickbeard.PROXY_SETTING}" class="form-control input-sm input300"  autocapitalize="off" />
                                     <div class="clear-left"><p>blank to disable or proxy to use when connecting to providers</p></div>
                             </label>
                         </div>
@@ -602,7 +602,7 @@
                             <label for="proxy_indexers">
                                 <span class="component-title">Use proxy for indexers</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="proxy_indexers" id="proxy_indexers" ${('', 'checked="checked"')[bool(sickbeard.PROXY_INDEXERS)]}/>
+                                    <input type="checkbox" name="proxy_indexers" id="proxy_indexers" ${('', 'checked="checked"')[bool(sickbeard.PROXY_INDEXERS)]} autocapitalize="off" />
                                     <p>use proxy host for connecting to indexers (thetvdb)</p>
                                 </span>
                             </label>
@@ -612,8 +612,8 @@
                             <label for="skip_removed_files">
                                 <span class="component-title">Skip Remove Detection</span>
                                 <span class="component-desc">
-                                <input type="checkbox" name="skip_removed_files" id="skip_removed_files" ${('', 'checked="checked"')[bool(sickbeard.SKIP_REMOVED_FILES)]}/>
-                                <p>Skip detection of removed files. If disable it will set default deleted status</p>
+                                <input type="checkbox" name="skip_removed_files" id="skip_removed_files" ${('', 'checked="checked"')[bool(sickbeard.SKIP_REMOVED_FILES)]} autocapitalize="off" />
+                                <p>Skip detection of removed files. If disabled the episode will be set to the default deleted status</p>
                                  </span>
                                 <div class="clear-left">
                                 <span class="component-desc"><b>NOTE:</b> This may mean SickRage misses renames as well</span>
@@ -636,7 +636,7 @@
                                             <option value="${defStatus}" ${('', 'selected="selected"')[sickbeard.EP_DEFAULT_DELETED_STATUS == defStatus]}>${statusStrings[defStatus]}</option>
                                         % endfor
                                         </select>
-                                        <input type="hidden" name="ep_default_deleted_status" value="${sickbeard.EP_DEFAULT_DELETED_STATUS}" />
+                                        <input type="hidden" name="ep_default_deleted_status" value="${sickbeard.EP_DEFAULT_DELETED_STATUS}"  autocapitalize="off" />
 % endif
                                     <span>Define the status to be set for media file that has been deleted.</span>
                                     <div class="clear-left">
@@ -647,7 +647,7 @@
                             </label>
                         </div>
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" />
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
                     </fieldset>
                 </div>
 
@@ -695,7 +695,7 @@
                             <label for="git_username">
                                 <span class="component-title">GitHub username</span>
                                 <span class="component-desc">
-                                    <input type="text" name="git_username" id="git_username" value="${sickbeard.GIT_USERNAME}" class="form-control input-sm input300" />
+                                    <input type="text" name="git_username" id="git_username" value="${sickbeard.GIT_USERNAME}" class="form-control input-sm input300"  autocapitalize="off" />
                                     <div class="clear-left"><p>*** (REQUIRED FOR SUBMITTING ISSUES) ***</p></div>
                                 </span>
                             </label>
@@ -705,7 +705,7 @@
                             <label for="git_password">
                                 <span class="component-title">GitHub password</span>
                                 <span class="component-desc">
-                                    <input type="password" name="git_password" id="git_password" value="${sickbeard.GIT_PASSWORD}" class="form-control input-sm input300" />
+                                    <input type="password" name="git_password" id="git_password" value="${sickbeard.GIT_PASSWORD}" class="form-control input-sm input300"  autocapitalize="off" />
                                     <div class="clear-left"><p>*** (REQUIRED FOR SUBMITTING ISSUES) ***</p></div>
                                 </span>
                             </label>
@@ -715,7 +715,7 @@
                             <label for="git_remote">
                                 <span class="component-title">GitHub remote for branch</span>
                                 <span class="component-desc">
-                                    <input type="text" name="git_remote" id="git_remote" value="${sickbeard.GIT_REMOTE}" class="form-control input-sm input300" />
+                                    <input type="text" name="git_remote" id="git_remote" value="${sickbeard.GIT_REMOTE}" class="form-control input-sm input300"  autocapitalize="off" />
                                     <div class="clear-left"><p>default:origin. Access repo configured remotes (save then refresh browser)</p></div>
                                 </span>
                             </label>
@@ -725,7 +725,7 @@
                             <label>
                                 <span class="component-title">Git executable path</span>
                                 <span class="component-desc">
-                                    <input type="text" name="git_path" value="${sickbeard.GIT_PATH}" class="form-control input-sm input300" />
+                                    <input type="text" name="git_path" value="${sickbeard.GIT_PATH}" class="form-control input-sm input300"  autocapitalize="off" />
                                     <div class="clear-left"><p>only needed if OS is unable to locate git from env</p></div>
                                 </span>
                             </label>
@@ -735,7 +735,7 @@
                             <label for="git_reset">
                                 <span class="component-title">Git reset</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="git_reset" id="git_reset" ${('', 'checked="checked"')[bool(sickbeard.GIT_RESET)]}/>
+                                    <input type="checkbox" name="git_reset" id="git_reset" ${('', 'checked="checked"')[bool(sickbeard.GIT_RESET)]} autocapitalize="off" />
                                     <p>removes untracked files and performs a hard reset on git branch automatically to help resolve update issues</p>
                                 </span>
                             </label>
@@ -745,13 +745,13 @@
                             <label for="git_autoissues">
                                 <span class="component-title">Git auto-issues submit</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="git_autoissues" id="git_autoissues" ${('', 'checked="checked"')[bool(sickbeard.GIT_AUTOISSUES)]} disable/>
+                                    <input type="checkbox" name="git_autoissues" id="git_autoissues" ${('', 'checked="checked"')[bool(sickbeard.GIT_AUTOISSUES)]} disable autocapitalize="off" />
                                     <p>automatically submit bug/issue reports to our issue tracker when errors are logged</p>
                                 </span>
                             </label>
                         </div>
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" />
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
                     </fieldset>
 
                 </div>
@@ -760,7 +760,7 @@
 
                 <br>
                 <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6>
-                <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
+                <input type="submit" class="btn pull-left config_submitter button" value="Save Changes"  autocapitalize="off" />
 
             </div><!-- /config-components -->
 
diff --git a/gui/slick/views/config_notifications.mako b/gui/slick/views/config_notifications.mako
index 69f41f94d3ea1f41285f0afa1ca61469978525ea..a8c288ca9a2673c11060eab0f8bd3bb3e57ff08b 100644
--- a/gui/slick/views/config_notifications.mako
+++ b/gui/slick/views/config_notifications.mako
@@ -36,7 +36,7 @@
                             <label class="clearfix" for="use_kodi">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_kodi" id="use_kodi" ${('', 'checked="checked"')[bool(sickbeard.USE_KODI)]}/>
+                                    <input type="checkbox" class="enabler" name="use_kodi" id="use_kodi" ${('', 'checked="checked"')[bool(sickbeard.USE_KODI)]} autocapitalize="off" />
                                     <p>should SickRage send KODI commands ?<p>
                                 </span>
                             </label>
@@ -47,7 +47,7 @@
                                 <label for="kodi_always_on">
                                     <span class="component-title">Always on</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="kodi_always_on" id="kodi_always_on" ${('', 'checked="checked"')[bool(sickbeard.KODI_ALWAYS_ON)]}/>
+                                        <input type="checkbox" name="kodi_always_on" id="kodi_always_on" ${('', 'checked="checked"')[bool(sickbeard.KODI_ALWAYS_ON)]} autocapitalize="off" />
                                         <p>log errors when unreachable ?</p>
                                     </span>
                                 </label>
@@ -56,7 +56,7 @@
                                 <label for="kodi_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="kodi_notify_onsnatch" id="kodi_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.KODI_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="kodi_notify_onsnatch" id="kodi_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.KODI_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -65,7 +65,7 @@
                                 <label for="kodi_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="kodi_notify_ondownload" id="kodi_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.KODI_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="kodi_notify_ondownload" id="kodi_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.KODI_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -74,7 +74,7 @@
                                 <label for="kodi_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="kodi_notify_onsubtitledownload" id="kodi_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.KODI_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="kodi_notify_onsubtitledownload" id="kodi_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.KODI_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -83,7 +83,7 @@
                                 <label for="kodi_update_library">
                                     <span class="component-title">Update library</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="kodi_update_library" id="kodi_update_library" ${('', 'checked="checked"')[bool(sickbeard.KODI_UPDATE_LIBRARY)]}/>
+                                        <input type="checkbox" name="kodi_update_library" id="kodi_update_library" ${('', 'checked="checked"')[bool(sickbeard.KODI_UPDATE_LIBRARY)]} autocapitalize="off" />
                                         <p>update KODI library when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -92,7 +92,7 @@
                                 <label for="kodi_update_full">
                                     <span class="component-title">Full library update</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="kodi_update_full" id="kodi_update_full" ${('', 'checked="checked"')[bool(sickbeard.KODI_UPDATE_FULL)]}/>
+                                        <input type="checkbox" name="kodi_update_full" id="kodi_update_full" ${('', 'checked="checked"')[bool(sickbeard.KODI_UPDATE_FULL)]} autocapitalize="off" />
                                         <p>perform a full library update if update per-show fails ?</p>
                                     </span>
                                 </label>
@@ -101,7 +101,7 @@
                                 <label for="kodi_update_onlyfirst">
                                     <span class="component-title">Only update first host</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="kodi_update_onlyfirst" id="kodi_update_onlyfirst" ${('', 'checked="checked"')[bool(sickbeard.KODI_UPDATE_ONLYFIRST)]}/>
+                                        <input type="checkbox" name="kodi_update_onlyfirst" id="kodi_update_onlyfirst" ${('', 'checked="checked"')[bool(sickbeard.KODI_UPDATE_ONLYFIRST)]} autocapitalize="off" />
                                         <p>only send library updates to the first active host ?</p>
                                     </span>
                                 </label>
@@ -109,7 +109,7 @@
                             <div class="field-pair">
                                 <label for="kodi_host">
                                     <span class="component-title">KODI IP:Port</span>
-                                    <input type="text" name="kodi_host" id="kodi_host" value="${sickbeard.KODI_HOST}" class="form-control input-sm input350" />
+                                    <input type="text" name="kodi_host" id="kodi_host" value="${sickbeard.KODI_HOST}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -123,7 +123,7 @@
                             <div class="field-pair">
                                 <label for="kodi_username">
                                     <span class="component-title">KODI username</span>
-                                    <input type="text" name="kodi_username" id="kodi_username" value="${sickbeard.KODI_USERNAME}" class="form-control input-sm input250" />
+                                    <input type="text" name="kodi_username" id="kodi_username" value="${sickbeard.KODI_USERNAME}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -133,7 +133,7 @@
                             <div class="field-pair">
                                 <label for="kodi_password">
                                     <span class="component-title">KODI password</span>
-                                    <input type="password" name="kodi_password" id="kodi_password" value="${sickbeard.KODI_PASSWORD}" class="form-control input-sm input250" />
+                                    <input type="password" name="kodi_password" id="kodi_password" value="${sickbeard.KODI_PASSWORD}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -141,8 +141,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testKODI-result">Click below to test.</div>
-                            <input  class="btn" type="button" value="Test KODI" id="testKODI" />
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input  class="btn" type="button" value="Test KODI" id="testKODI"  autocapitalize="off" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_kodi //-->
 
                     </fieldset>
@@ -162,7 +162,7 @@
                             <label for="use_plex">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_plex" id="use_plex" ${('', 'checked="checked"')[bool(sickbeard.USE_PLEX)]}/>
+                                    <input type="checkbox" class="enabler" name="use_plex" id="use_plex" ${('', 'checked="checked"')[bool(sickbeard.USE_PLEX)]} autocapitalize="off" />
                                     <p>should SickRage send Plex commands ?</p>
                                 </span>
                             </label>
@@ -172,7 +172,7 @@
                             <div class="field-pair">
                                 <label for="plex_server_token">
                                     <span class="component-title">Plex Media Server Auth Token</span>
-                                    <input type="text" name="plex_server_token" id="plex_server_token" value="${sickbeard.PLEX_SERVER_TOKEN}" class="form-control input-sm input250" />
+                                    <input type="text" name="plex_server_token" id="plex_server_token" value="${sickbeard.PLEX_SERVER_TOKEN}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -188,7 +188,7 @@
                                     <label for="plex_username">
                                         <span class="component-title">Server Username</span>
                                         <span class="component-desc">
-                                            <input type="text" name="plex_username" id="plex_username" value="${sickbeard.PLEX_USERNAME}" class="form-control input-sm input250" />
+                                            <input type="text" name="plex_username" id="plex_username" value="${sickbeard.PLEX_USERNAME}" class="form-control input-sm input250"  autocapitalize="off" />
                                             <p>blank = no authentication</p>
                                         </span>
                                     </label>
@@ -197,7 +197,7 @@
                                     <label for="plex_password">
                                         <span class="component-title">Server/client password</span>
                                         <span class="component-desc">
-                                            <input type="password" name="plex_password" id="plex_password" value="${'*' * len(sickbeard.PLEX_PASSWORD)}" class="form-control input-sm input250" />
+                                            <input type="password" name="plex_password" id="plex_password" value="${'*' * len(sickbeard.PLEX_PASSWORD)}" class="form-control input-sm input250"  autocapitalize="off" />
                                             <p>blank = no authentication</p>
                                         </span>
                                     </label>
@@ -209,7 +209,7 @@
                                     <label for="plex_update_library">
                                         <span class="component-title">Update server library</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" class="enabler" name="plex_update_library" id="plex_update_library" ${('', 'checked="checked"')[bool(sickbeard.PLEX_UPDATE_LIBRARY)]}/>
+                                            <input type="checkbox" class="enabler" name="plex_update_library" id="plex_update_library" ${('', 'checked="checked"')[bool(sickbeard.PLEX_UPDATE_LIBRARY)]} autocapitalize="off" />
                                             <p>update Plex Media Server library when a download finishes</p>
                                         </span>
                                     </label>
@@ -219,7 +219,7 @@
                                         <label for="plex_server_host">
                                             <span class="component-title">Plex Media Server IP:Port</span>
                                             <span class="component-desc">
-                                                <input type="text" name="plex_server_host" id="plex_server_host" value="${re.sub(r'\b,\b', ', ', sickbeard.PLEX_SERVER_HOST)}" class="form-control input-sm input350" />
+                                                <input type="text" name="plex_server_host" id="plex_server_host" value="${re.sub(r'\b,\b', ', ', sickbeard.PLEX_SERVER_HOST)}" class="form-control input-sm input350"  autocapitalize="off" />
                                                 <div class="clear-left">
                                                     <p>one or more hosts running Plex Media Server<br>(eg. 192.168.1.1:32400, 192.168.1.2:32400)</p>
                                                 </div>
@@ -229,8 +229,8 @@
 
                                     <div class="field-pair">
                                         <div class="testNotification" id="testPMS-result">Click below to test Plex server(s)</div>
-                                        <input class="btn" type="button" value="Test Plex Server" id="testPMS" />
-                                        <input type="submit" class="config_submitter btn" value="Save Changes" />
+                                        <input class="btn" type="button" value="Test Plex Server" id="testPMS"  autocapitalize="off" />
+                                        <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                                         <div class="clear-left">&nbsp;</div>
                                     </div>
                                 </div>
@@ -249,7 +249,7 @@
                             <label for="use_plex_client">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_plex" id="use_plex_client" ${('', 'checked="checked"')[bool(sickbeard.USE_PLEX_CLIENT)]}/>
+                                    <input type="checkbox" class="enabler" name="use_plex" id="use_plex_client" ${('', 'checked="checked"')[bool(sickbeard.USE_PLEX_CLIENT)]} autocapitalize="off" />
                                     <p>should SickRage send Plex commands ?</p>
                                 </span>
                             </label>
@@ -260,7 +260,7 @@
                                 <label for="plex_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="plex_notify_onsnatch" id="plex_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.PLEX_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="plex_notify_onsnatch" id="plex_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.PLEX_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -269,7 +269,7 @@
                                 <label for="plex_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="plex_notify_ondownload" id="plex_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.PLEX_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="plex_notify_ondownload" id="plex_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.PLEX_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -278,7 +278,7 @@
                                 <label for="plex_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="plex_notify_onsubtitledownload" id="plex_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.PLEX_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="plex_notify_onsubtitledownload" id="plex_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.PLEX_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -287,7 +287,7 @@
                                 <label for="plex_host">
                                     <span class="component-title">Plex Client IP:Port</span>
                                     <span class="component-desc">
-                                        <input type="text" name="plex_host" id="plex_host" value="${sickbeard.PLEX_HOST}" class="form-control input-sm input350" />
+                                        <input type="text" name="plex_host" id="plex_host" value="${sickbeard.PLEX_HOST}" class="form-control input-sm input350"  autocapitalize="off" />
                                         <div class="clear-left">
                                             <p>one or more hosts running Plex client<br>(eg. 192.168.1.100:3000, 192.168.1.101:3000)</p>
                                         </div>
@@ -299,7 +299,7 @@
                                     <label for="plex_username">
                                         <span class="component-title">Server Username</span>
                                         <span class="component-desc">
-                                            <input type="text" name="plex_client_username" id="plex_client_username" value="${sickbeard.PLEX_CLIENT_USERNAME}" class="form-control input-sm input250" />
+                                            <input type="text" name="plex_client_username" id="plex_client_username" value="${sickbeard.PLEX_CLIENT_USERNAME}" class="form-control input-sm input250"  autocapitalize="off" />
                                             <p>blank = no authentication</p>
                                         </span>
                                     </label>
@@ -308,7 +308,7 @@
                                     <label for="plex_client_password">
                                         <span class="component-title">Client Password</span>
                                         <span class="component-desc">
-                                            <input type="password" name="plex_client_password" id="plex_client_password" value="${'*' * len(sickbeard.PLEX_CLIENT_PASSWORD)}" class="form-control input-sm input250" />
+                                            <input type="password" name="plex_client_password" id="plex_client_password" value="${'*' * len(sickbeard.PLEX_CLIENT_PASSWORD)}" class="form-control input-sm input250"  autocapitalize="off" />
                                             <p>blank = no authentication</p>
                                         </span>
                                     </label>
@@ -317,8 +317,8 @@
 
                             <div class="field-pair">
                                 <div class="testNotification" id="testPMC-result">Click below to test Plex client(s)</div>
-                                <input class="btn" type="button" value="Test Plex Client" id="testPMC" />
-                                <input type="submit" class="config_submitter btn" value="Save Changes" />
+                                <input class="btn" type="button" value="Test Plex Client" id="testPMC"  autocapitalize="off" />
+                                <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                                 <div class=clear-left><p>Note: some Plex clients <b class="boldest">do not</b> support notifications e.g. Plexapp for Samsung TVs</p></div>
                             </div>
                         </div><!-- /content_use_plex_client -->
@@ -337,7 +337,7 @@
                             <label for="use_emby">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_emby" id="use_emby" ${('', 'checked="checked"')[bool(sickbeard.USE_EMBY)]} />
+                                    <input type="checkbox" class="enabler" name="use_emby" id="use_emby" ${('', 'checked="checked"')[bool(sickbeard.USE_EMBY)]}  autocapitalize="off" />
                                     <p>should SickRage send update commands to Emby?<p>
                                 </span>
                             </label>
@@ -346,7 +346,7 @@
                             <div class="field-pair">
                                 <label for="emby_host">
                                     <span class="component-title">Emby IP:Port</span>
-                                    <input type="text" name="emby_host" id="emby_host" value="${sickbeard.EMBY_HOST}" class="form-control input-sm input250" />
+                                    <input type="text" name="emby_host" id="emby_host" value="${sickbeard.EMBY_HOST}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -356,12 +356,12 @@
                             <div class="field-pair">
                                 <label for="emby_apikey">
                                     <span class="component-title">Emby API Key</span>
-                                    <input type="text" name="emby_apikey" id="emby_apikey" value="${sickbeard.EMBY_APIKEY}" class="form-control input-sm input250" />
+                                    <input type="text" name="emby_apikey" id="emby_apikey" value="${sickbeard.EMBY_APIKEY}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                             </div>
                             <div class="testNotification" id="testEMBY-result">Click below to test.</div>
-                                <input  class="btn" type="button" value="Test Emby" id="testEMBY" />
-                                <input type="submit" class="config_submitter btn" value="Save Changes" />
+                                <input  class="btn" type="button" value="Test Emby" id="testEMBY"  autocapitalize="off" />
+                                <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                             </div>
                         <!-- /content_use_emby //-->
                     </fieldset>
@@ -379,7 +379,7 @@
                             <label for="use_nmj">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_nmj" id="use_nmj" ${('', 'checked="checked"')[bool(sickbeard.USE_NMJ)]}/>
+                                    <input type="checkbox" class="enabler" name="use_nmj" id="use_nmj" ${('', 'checked="checked"')[bool(sickbeard.USE_NMJ)]} autocapitalize="off" />
                                     <p>should SickRage send update commands to NMJ ?</p>
                                 </span>
                             </label>
@@ -389,7 +389,7 @@
                             <div class="field-pair">
                                 <label for="nmj_host">
                                     <span class="component-title">Popcorn IP address</span>
-                                    <input type="text" name="nmj_host" id="nmj_host" value="${sickbeard.NMJ_HOST}" class="form-control input-sm input250" />
+                                    <input type="text" name="nmj_host" id="nmj_host" value="${sickbeard.NMJ_HOST}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -399,7 +399,7 @@
                             <div class="field-pair">
                                 <label>
                                     <span class="component-title">Get settings</span>
-                                    <input class="btn btn-inline" type="button" value="Get Settings" id="settingsNMJ" />
+                                    <input class="btn btn-inline" type="button" value="Get Settings" id="settingsNMJ"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -409,7 +409,7 @@
                             <div class="field-pair">
                                 <label for="nmj_database">
                                     <span class="component-title">NMJ database</span>
-                                    <input type="text" name="nmj_database" id="nmj_database" value="${sickbeard.NMJ_DATABASE}" class="form-control input-sm input250" ${(' readonly="readonly"', '')[sickbeard.NMJ_DATABASE is True]}/>
+                                    <input type="text" name="nmj_database" id="nmj_database" value="${sickbeard.NMJ_DATABASE}" class="form-control input-sm input250" ${(' readonly="readonly"', '')[sickbeard.NMJ_DATABASE is True]} autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -419,7 +419,7 @@
                             <div class="field-pair">
                                 <label for="nmj_mount">
                                     <span class="component-title">NMJ mount url</span>
-                                    <input type="text" name="nmj_mount" id="nmj_mount" value="${sickbeard.NMJ_MOUNT}" class="form-control input-sm input250" ${(' readonly="readonly"', '')[sickbeard.NMJ_MOUNT is True]}/>
+                                    <input type="text" name="nmj_mount" id="nmj_mount" value="${sickbeard.NMJ_MOUNT}" class="form-control input-sm input250" ${(' readonly="readonly"', '')[sickbeard.NMJ_MOUNT is True]} autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -427,8 +427,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testNMJ-result">Click below to test.</div>
-                            <input class="btn" type="button" value="Test NMJ" id="testNMJ" />
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input class="btn" type="button" value="Test NMJ" id="testNMJ"  autocapitalize="off" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_nmj //-->
 
                     </fieldset>
@@ -445,7 +445,7 @@
                             <label for="use_nmjv2">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_nmjv2" id="use_nmjv2" ${('', 'checked="checked"')[bool(sickbeard.USE_NMJv2)]}/>
+                                    <input type="checkbox" class="enabler" name="use_nmjv2" id="use_nmjv2" ${('', 'checked="checked"')[bool(sickbeard.USE_NMJv2)]} autocapitalize="off" />
                                     <p>should SickRage send update commands to NMJv2 ?</p>
                                 </span>
                             </label>
@@ -455,7 +455,7 @@
                             <div class="field-pair">
                                 <label for="nmjv2_host">
                                     <span class="component-title">Popcorn IP address</span>
-                                    <input type="text" name="nmjv2_host" id="nmjv2_host" value="${sickbeard.NMJv2_HOST}" class="form-control input-sm input250" />
+                                    <input type="text" name="nmjv2_host" id="nmjv2_host" value="${sickbeard.NMJv2_HOST}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -466,10 +466,10 @@
                                 <span class="component-title">Database location</span>
                                 <span class="component-desc">
                                     <label for="NMJV2_DBLOC_A" class="space-right">
-                                        <input type="radio" NAME="nmjv2_dbloc" VALUE="local" id="NMJV2_DBLOC_A" ${('', 'checked="checked"')[sickbeard.NMJv2_DBLOC == 'local']}/>PCH Local Media
+                                        <input type="radio" NAME="nmjv2_dbloc" VALUE="local" id="NMJV2_DBLOC_A" ${('', 'checked="checked"')[sickbeard.NMJv2_DBLOC == 'local']} autocapitalize="off" />PCH Local Media
                                     </label>
                                     <label for="NMJV2_DBLOC_B">
-                                        <input type="radio" NAME="nmjv2_dbloc" VALUE="network" id="NMJV2_DBLOC_B" ${('', 'checked="checked"')[sickbeard.NMJv2_DBLOC == 'network']}/>PCH Network Media
+                                        <input type="radio" NAME="nmjv2_dbloc" VALUE="network" id="NMJV2_DBLOC_B" ${('', 'checked="checked"')[sickbeard.NMJv2_DBLOC == 'network']} autocapitalize="off" />PCH Network Media
                                     </label>
                                 </span>
                             </div>
@@ -496,7 +496,7 @@
                             <div class="field-pair">
                                 <label for="settingsNMJv2">
                                     <span class="component-title">Find database</span>
-                                    <input type="button" class="btn btn-inline" value="Find Database" id="settingsNMJv2" />
+                                    <input type="button" class="btn btn-inline" value="Find Database" id="settingsNMJv2"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -506,7 +506,7 @@
                             <div class="field-pair">
                                 <label for="nmjv2_database">
                                     <span class="component-title">NMJv2 database</span>
-                                    <input type="text" name="nmjv2_database" id="nmjv2_database" value="${sickbeard.NMJv2_DATABASE}" class="form-control input-sm input250" ${(' readonly="readonly"', '')[sickbeard.NMJv2_DATABASE is True]}/>
+                                    <input type="text" name="nmjv2_database" id="nmjv2_database" value="${sickbeard.NMJv2_DATABASE}" class="form-control input-sm input250" ${(' readonly="readonly"', '')[sickbeard.NMJv2_DATABASE is True]} autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -514,8 +514,8 @@
                                 </label>
                             </div>
                         <div class="testNotification" id="testNMJv2-result">Click below to test.</div>
-                        <input class="btn" type="button" value="Test NMJv2" id="testNMJv2" />
-                        <input type="submit" class="config_submitter btn" value="Save Changes" />
+                        <input class="btn" type="button" value="Test NMJv2" id="testNMJv2"  autocapitalize="off" />
+                        <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_nmjv2 //-->
 
                     </fieldset>
@@ -535,7 +535,7 @@
                             <label for="use_synoindex">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_synoindex" id="use_synoindex" ${('', 'checked="checked"')[bool(sickbeard.USE_SYNOINDEX)]}/>
+                                    <input type="checkbox" class="enabler" name="use_synoindex" id="use_synoindex" ${('', 'checked="checked"')[bool(sickbeard.USE_SYNOINDEX)]} autocapitalize="off" />
                                     <p>should SickRage send Synology notifications ?</p>
                                 </span>
                             </label>
@@ -546,7 +546,7 @@
                         </div>
 
                         <div id="content_use_synoindex">
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_synoindex //-->
 
                     </fieldset>
@@ -565,7 +565,7 @@
                             <label for="use_synologynotifier">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_synologynotifier" id="use_synologynotifier" ${('', 'checked="checked"')[bool(sickbeard.USE_SYNOLOGYNOTIFIER)]}/>
+                                    <input type="checkbox" class="enabler" name="use_synologynotifier" id="use_synologynotifier" ${('', 'checked="checked"')[bool(sickbeard.USE_SYNOLOGYNOTIFIER)]} autocapitalize="off" />
                                     <p>should SickRage send notifications to the Synology Notifier ?</p>
                                 </span>
                             </label>
@@ -579,7 +579,7 @@
                                 <label for="synologynotifier_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="synologynotifier_notify_onsnatch" id="synologynotifier_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.SYNOLOGYNOTIFIER_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="synologynotifier_notify_onsnatch" id="synologynotifier_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.SYNOLOGYNOTIFIER_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -588,7 +588,7 @@
                                 <label for="synologynotifier_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="synologynotifier_notify_ondownload" id="synologynotifier_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.SYNOLOGYNOTIFIER_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="synologynotifier_notify_ondownload" id="synologynotifier_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.SYNOLOGYNOTIFIER_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -597,12 +597,12 @@
                                 <label for="synologynotifier_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="synologynotifier_notify_onsubtitledownload" id="synologynotifier_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.SYNOLOGYNOTIFIER_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="synologynotifier_notify_onsubtitledownload" id="synologynotifier_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.SYNOLOGYNOTIFIER_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
                             </div>
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                            </div>
                     </fieldset>
                 </div><!-- /synology notifier component-group //-->
@@ -619,7 +619,7 @@
                             <label for="use_pytivo">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_pytivo" id="use_pytivo" ${('', 'checked="checked"')[bool(sickbeard.USE_PYTIVO)]}/>
+                                    <input type="checkbox" class="enabler" name="use_pytivo" id="use_pytivo" ${('', 'checked="checked"')[bool(sickbeard.USE_PYTIVO)]} autocapitalize="off" />
                                     <p>should SickRage send notifications to pyTivo ?</p>
                                 </span>
                             </label>
@@ -633,7 +633,7 @@
                             <div class="field-pair">
                                 <label for="pytivo_host">
                                     <span class="component-title">pyTivo IP:Port</span>
-                                    <input type="text" name="pytivo_host" id="pytivo_host" value="${sickbeard.PYTIVO_HOST}" class="form-control input-sm input250" />
+                                    <input type="text" name="pytivo_host" id="pytivo_host" value="${sickbeard.PYTIVO_HOST}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -643,7 +643,7 @@
                             <div class="field-pair">
                                 <label for="pytivo_share_name">
                                     <span class="component-title">pyTivo share name</span>
-                                    <input type="text" name="pytivo_share_name" id="pytivo_share_name" value="${sickbeard.PYTIVO_SHARE_NAME}" class="form-control input-sm input250" />
+                                    <input type="text" name="pytivo_share_name" id="pytivo_share_name" value="${sickbeard.PYTIVO_SHARE_NAME}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -653,14 +653,14 @@
                             <div class="field-pair">
                                 <label for="pytivo_tivo_name">
                                     <span class="component-title">Tivo name</span>
-                                    <input type="text" name="pytivo_tivo_name" id="pytivo_tivo_name" value="${sickbeard.PYTIVO_TIVO_NAME}" class="form-control input-sm input250" />
+                                    <input type="text" name="pytivo_tivo_name" id="pytivo_tivo_name" value="${sickbeard.PYTIVO_TIVO_NAME}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
                                     <span class="component-desc">(Messages &amp; Settings > Account &amp; System Information > System Information > DVR name)</span>
                                 </label>
                             </div>
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_pytivo //-->
 
                     </fieldset>
@@ -681,7 +681,7 @@
                             <label for="use_growl">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_growl" id="use_growl" ${('', 'checked="checked"')[bool(sickbeard.USE_GROWL)]}/>
+                                    <input type="checkbox" class="enabler" name="use_growl" id="use_growl" ${('', 'checked="checked"')[bool(sickbeard.USE_GROWL)]} autocapitalize="off" />
                                     <p>should SickRage send Growl notifications ?</p>
                                 </span>
                             </label>
@@ -692,7 +692,7 @@
                                 <label for="growl_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="growl_notify_onsnatch" id="growl_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.GROWL_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="growl_notify_onsnatch" id="growl_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.GROWL_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -701,7 +701,7 @@
                                 <label for="growl_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="growl_notify_ondownload" id="growl_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.GROWL_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="growl_notify_ondownload" id="growl_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.GROWL_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -710,7 +710,7 @@
                                 <label for="growl_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="growl_notify_onsubtitledownload" id="growl_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.GROWL_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="growl_notify_onsubtitledownload" id="growl_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.GROWL_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -718,7 +718,7 @@
                             <div class="field-pair">
                                 <label for="growl_host">
                                     <span class="component-title">Growl IP:Port</span>
-                                    <input type="text" name="growl_host" id="growl_host" value="${sickbeard.GROWL_HOST}" class="form-control input-sm input250" />
+                                    <input type="text" name="growl_host" id="growl_host" value="${sickbeard.GROWL_HOST}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -728,7 +728,7 @@
                             <div class="field-pair">
                                 <label for="growl_password">
                                     <span class="component-title">Growl password</span>
-                                    <input type="password" name="growl_password" id="growl_password" value="${sickbeard.GROWL_PASSWORD}" class="form-control input-sm input250" />
+                                    <input type="password" name="growl_password" id="growl_password" value="${sickbeard.GROWL_PASSWORD}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -740,8 +740,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testGrowl-result">Click below to register and test Growl, this is required for Growl notifications to work.</div>
-                            <input  class="btn" type="button" value="Register Growl" id="testGrowl" />
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input  class="btn" type="button" value="Register Growl" id="testGrowl"  autocapitalize="off" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_growl //-->
 
                     </fieldset>
@@ -759,7 +759,7 @@
                             <label for="use_prowl">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_prowl" id="use_prowl" ${('', 'checked="checked"')[bool(sickbeard.USE_PROWL)]}/>
+                                    <input type="checkbox" class="enabler" name="use_prowl" id="use_prowl" ${('', 'checked="checked"')[bool(sickbeard.USE_PROWL)]} autocapitalize="off" />
                                     <p>should SickRage send Prowl notifications ?</p>
                                 </span>
                             </label>
@@ -770,7 +770,7 @@
                                 <label for="prowl_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="prowl_notify_onsnatch" id="prowl_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.PROWL_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="prowl_notify_onsnatch" id="prowl_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.PROWL_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -779,7 +779,7 @@
                                 <label for="prowl_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="prowl_notify_ondownload" id="prowl_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.PROWL_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="prowl_notify_ondownload" id="prowl_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.PROWL_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -788,7 +788,7 @@
                                 <label for="prowl_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="prowl_notify_onsubtitledownload" id="prowl_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.PROWL_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="prowl_notify_onsubtitledownload" id="prowl_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.PROWL_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -796,13 +796,13 @@
                             <div class="field-pair">
                                  <label for="prowl_message_title">
                                      <span class="component-title">Prowl Message Title:</span>
-                                     <input type="text" name="prowl_message_title" id="prowl_message_title" value="${sickbeard.PROWL_MESSAGE_TITLE}" class="form-control input-sm input250" />
+                                     <input type="text" name="prowl_message_title" id="prowl_message_title" value="${sickbeard.PROWL_MESSAGE_TITLE}" class="form-control input-sm input250"  autocapitalize="off" />
                                  </label>
                             </div>
                             <div class="field-pair">
                                 <label for="prowl_api">
                                     <span class="component-title">Global Prowl API key(s):</span>
-                                    <input type="text" name="prowl_api" id="prowl_api" value="${sickbeard.PROWL_API}" class="form-control input-sm input250" />
+                                    <input type="text" name="prowl_api" id="prowl_api" value="${sickbeard.PROWL_API}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -822,7 +822,7 @@
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
-                                    <input type="text" name="prowl_show_list" id="prowl_show_list" class="form-control input-sm input350" />
+                                    <input type="text" name="prowl_show_list" id="prowl_show_list" class="form-control input-sm input350"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -832,7 +832,7 @@
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
-                                    <input id="prowl_show_save" class="btn" type="button" value="Save for this show" />
+                                    <input id="prowl_show_save" class="btn" type="button" value="Save for this show"  autocapitalize="off" />
                                 </label>
                             </div>
                             <div class="field-pair">
@@ -852,8 +852,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testProwl-result">Click below to test.</div>
-                            <input  class="btn" type="button" value="Test Prowl" id="testProwl" />
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input  class="btn" type="button" value="Test Prowl" id="testProwl"  autocapitalize="off" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_prowl //-->
 
                     </fieldset>
@@ -871,7 +871,7 @@
                             <label for="use_libnotify">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_libnotify" id="use_libnotify" ${('', 'checked="checked"')[bool(sickbeard.USE_LIBNOTIFY)]}/>
+                                    <input type="checkbox" class="enabler" name="use_libnotify" id="use_libnotify" ${('', 'checked="checked"')[bool(sickbeard.USE_LIBNOTIFY)]} autocapitalize="off" />
                                     <p>should SickRage send Libnotify notifications ?</p>
                                 </span>
                             </label>
@@ -882,7 +882,7 @@
                                 <label for="libnotify_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="libnotify_notify_onsnatch" id="libnotify_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.LIBNOTIFY_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="libnotify_notify_onsnatch" id="libnotify_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.LIBNOTIFY_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -891,7 +891,7 @@
                                 <label for="libnotify_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="libnotify_notify_ondownload" id="libnotify_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.LIBNOTIFY_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="libnotify_notify_ondownload" id="libnotify_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.LIBNOTIFY_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -900,14 +900,14 @@
                                 <label for="libnotify_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="libnotify_notify_onsubtitledownload" id="libnotify_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.LIBNOTIFY_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="libnotify_notify_onsubtitledownload" id="libnotify_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.LIBNOTIFY_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
                             </div>
                             <div class="testNotification" id="testLibnotify-result">Click below to test.</div>
-                            <input  class="btn" type="button" value="Test Libnotify" id="testLibnotify" />
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input  class="btn" type="button" value="Test Libnotify" id="testLibnotify"  autocapitalize="off" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_libnotify //-->
 
                     </fieldset>
@@ -925,7 +925,7 @@
                             <label for="use_pushover">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_pushover" id="use_pushover" ${('', 'checked="checked"')[bool(sickbeard.USE_PUSHOVER)]}/>
+                                    <input type="checkbox" class="enabler" name="use_pushover" id="use_pushover" ${('', 'checked="checked"')[bool(sickbeard.USE_PUSHOVER)]} autocapitalize="off" />
                                     <p>should SickRage send Pushover notifications ?</p>
                                 </span>
                             </label>
@@ -936,7 +936,7 @@
                                 <label for="pushover_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="pushover_notify_onsnatch" id="pushover_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.PUSHOVER_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="pushover_notify_onsnatch" id="pushover_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.PUSHOVER_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -945,7 +945,7 @@
                                 <label for="pushover_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="pushover_notify_ondownload" id="pushover_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHOVER_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="pushover_notify_ondownload" id="pushover_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHOVER_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -954,7 +954,7 @@
                                 <label for="pushover_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="pushover_notify_onsubtitledownload" id="pushover_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHOVER_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="pushover_notify_onsubtitledownload" id="pushover_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHOVER_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -962,7 +962,7 @@
                             <div class="field-pair">
                                 <label for="pushover_userkey">
                                     <span class="component-title">Pushover key</span>
-                                    <input type="text" name="pushover_userkey" id="pushover_userkey" value="${sickbeard.PUSHOVER_USERKEY}" class="form-control input-sm input250" />
+                                    <input type="text" name="pushover_userkey" id="pushover_userkey" value="${sickbeard.PUSHOVER_USERKEY}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -972,7 +972,7 @@
                             <div class="field-pair">
                                 <label for="pushover_apikey">
                                     <span class="component-title">Pushover API key</span>
-                                    <input type="text" name="pushover_apikey" id="pushover_apikey" value="${sickbeard.PUSHOVER_APIKEY}" class="form-control input-sm input250" />
+                                    <input type="text" name="pushover_apikey" id="pushover_apikey" value="${sickbeard.PUSHOVER_APIKEY}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -982,7 +982,7 @@
                             <div class="field-pair">
                                 <label for="pushover_device">
                                     <span class="component-title">Pushover devices</span>
-                                    <input type="text" name="pushover_device" id="pushover_device" value="${sickbeard.PUSHOVER_DEVICE}" class="form-control input-sm input250" />
+                                    <input type="text" name="pushover_device" id="pushover_device" value="${sickbeard.PUSHOVER_DEVICE}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1024,8 +1024,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testPushover-result">Click below to test.</div>
-                            <input  class="btn" type="button" value="Test Pushover" id="testPushover" />
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input  class="btn" type="button" value="Test Pushover" id="testPushover"  autocapitalize="off" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_pushover //-->
 
                     </fieldset>
@@ -1042,7 +1042,7 @@
                             <label for="use_boxcar2">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_boxcar2" id="use_boxcar2" ${('', 'checked="checked"')[bool(sickbeard.USE_BOXCAR2)]}/>
+                                    <input type="checkbox" class="enabler" name="use_boxcar2" id="use_boxcar2" ${('', 'checked="checked"')[bool(sickbeard.USE_BOXCAR2)]} autocapitalize="off" />
                                     <p>should SickRage send Boxcar notifications ?</p>
                                 </span>
                             </label>
@@ -1053,7 +1053,7 @@
                                 <label for="boxcar2_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="boxcar2_notify_onsnatch" id="boxcar2_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.BOXCAR2_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="boxcar2_notify_onsnatch" id="boxcar2_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.BOXCAR2_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -1062,7 +1062,7 @@
                                 <label for="boxcar2_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="boxcar2_notify_ondownload" id="boxcar2_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.BOXCAR2_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="boxcar2_notify_ondownload" id="boxcar2_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.BOXCAR2_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -1071,7 +1071,7 @@
                                 <label for="boxcar2_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="boxcar2_notify_onsubtitledownload" id="boxcar2_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.BOXCAR2_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="boxcar2_notify_onsubtitledownload" id="boxcar2_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.BOXCAR2_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -1079,7 +1079,7 @@
                             <div class="field-pair">
                                 <label for="boxcar2_accesstoken">
                                     <span class="component-title">Boxcar2 access token</span>
-                                    <input type="text" name="boxcar2_accesstoken" id="boxcar2_accesstoken" value="${sickbeard.BOXCAR2_ACCESSTOKEN}" class="form-control input-sm input250" />
+                                    <input type="text" name="boxcar2_accesstoken" id="boxcar2_accesstoken" value="${sickbeard.BOXCAR2_ACCESSTOKEN}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1087,8 +1087,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testBoxcar2-result">Click below to test.</div>
-                            <input  class="btn" type="button" value="Test Boxcar" id="testBoxcar2" />
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input  class="btn" type="button" value="Test Boxcar" id="testBoxcar2"  autocapitalize="off" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_boxcar2 //-->
 
                     </fieldset>
@@ -1105,7 +1105,7 @@
                             <label for="use_nma">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_nma" id="use_nma" ${('', 'checked="checked"')[bool(sickbeard.USE_NMA)]}/>
+                                    <input type="checkbox" class="enabler" name="use_nma" id="use_nma" ${('', 'checked="checked"')[bool(sickbeard.USE_NMA)]} autocapitalize="off" />
                                     <p>should SickRage send NMA notifications ?</p>
                                 </span>
                             </label>
@@ -1116,7 +1116,7 @@
                                 <label for="nma_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="nma_notify_onsnatch" id="nma_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.NMA_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="nma_notify_onsnatch" id="nma_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.NMA_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -1125,7 +1125,7 @@
                                 <label for="nma_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="nma_notify_ondownload" id="nma_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.NMA_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="nma_notify_ondownload" id="nma_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.NMA_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -1134,7 +1134,7 @@
                                 <label for="nma_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="nma_notify_onsubtitledownload" id="nma_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.NMA_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="nma_notify_onsubtitledownload" id="nma_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.NMA_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -1142,7 +1142,7 @@
                             <div class="field-pair">
                                 <label for="nma_api">
                                        <span class="component-title">NMA API key:</span>
-                                    <input type="text" name="nma_api" id="nma_api" value="${sickbeard.NMA_API}" class="form-control input-sm input350" />
+                                    <input type="text" name="nma_api" id="nma_api" value="${sickbeard.NMA_API}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1166,8 +1166,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testNMA-result">Click below to test.</div>
-                            <input  class="btn" type="button" value="Test NMA" id="testNMA" />
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input  class="btn" type="button" value="Test NMA" id="testNMA"  autocapitalize="off" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_nma //-->
 
                     </fieldset>
@@ -1184,7 +1184,7 @@
                             <label for="use_pushalot">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_pushalot" id="use_pushalot" ${('', 'checked="checked"')[bool(sickbeard.USE_PUSHALOT)]}/>
+                                    <input type="checkbox" class="enabler" name="use_pushalot" id="use_pushalot" ${('', 'checked="checked"')[bool(sickbeard.USE_PUSHALOT)]} autocapitalize="off" />
                                     <p>should SickRage send Pushalot notifications ?
                                 </span>
                             </label>
@@ -1195,7 +1195,7 @@
                                 <label for="pushalot_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="pushalot_notify_onsnatch" id="pushalot_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.PUSHALOT_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="pushalot_notify_onsnatch" id="pushalot_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.PUSHALOT_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -1204,7 +1204,7 @@
                                 <label for="pushalot_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="pushalot_notify_ondownload" id="pushalot_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHALOT_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="pushalot_notify_ondownload" id="pushalot_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHALOT_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -1213,7 +1213,7 @@
                                 <label for="pushalot_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="pushalot_notify_onsubtitledownload" id="pushalot_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHALOT_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="pushalot_notify_onsubtitledownload" id="pushalot_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHALOT_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -1221,7 +1221,7 @@
                             <div class="field-pair">
                                 <label for="pushalot_authorizationtoken">
                                     <span class="component-title">Pushalot authorization token</span>
-                                    <input type="text" name="pushalot_authorizationtoken" id="pushalot_authorizationtoken" value="${sickbeard.PUSHALOT_AUTHORIZATIONTOKEN}" class="form-control input-sm input350" />
+                                    <input type="text" name="pushalot_authorizationtoken" id="pushalot_authorizationtoken" value="${sickbeard.PUSHALOT_AUTHORIZATIONTOKEN}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1229,8 +1229,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testPushalot-result">Click below to test.</div>
-                            <input type="button" class="btn" value="Test Pushalot" id="testPushalot" />
-                            <input type="submit" class="btn config_submitter" value="Save Changes" />
+                            <input type="button" class="btn" value="Test Pushalot" id="testPushalot"  autocapitalize="off" />
+                            <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_pushalot //-->
 
                     </fieldset>
@@ -1247,7 +1247,7 @@
                             <label for="use_pushbullet">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_pushbullet" id="use_pushbullet" ${('', 'checked="checked"')[bool(sickbeard.USE_PUSHBULLET)]}/>
+                                    <input type="checkbox" class="enabler" name="use_pushbullet" id="use_pushbullet" ${('', 'checked="checked"')[bool(sickbeard.USE_PUSHBULLET)]} autocapitalize="off" />
                                     <p>should SickRage send Pushbullet notifications ?</p>
                                 </span>
                             </label>
@@ -1258,7 +1258,7 @@
                                 <label for="pushbullet_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="pushbullet_notify_onsnatch" id="pushbullet_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.PUSHBULLET_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="pushbullet_notify_onsnatch" id="pushbullet_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.PUSHBULLET_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -1267,7 +1267,7 @@
                                 <label for="pushbullet_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="pushbullet_notify_ondownload" id="pushbullet_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHBULLET_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="pushbullet_notify_ondownload" id="pushbullet_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHBULLET_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -1276,7 +1276,7 @@
                                 <label for="pushbullet_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="pushbullet_notify_onsubtitledownload" id="pushbullet_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHBULLET_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="pushbullet_notify_onsubtitledownload" id="pushbullet_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.PUSHBULLET_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -1284,7 +1284,7 @@
                             <div class="field-pair">
                                 <label for="pushbullet_api">
                                     <span class="component-title">Pushbullet API key</span>
-                                    <input type="text" name="pushbullet_api" id="pushbullet_api" value="${sickbeard.PUSHBULLET_API}" class="form-control input-sm input350" />
+                                    <input type="text" name="pushbullet_api" id="pushbullet_api" value="${sickbeard.PUSHBULLET_API}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1296,7 +1296,7 @@
                                     <span class="component-title">Pushbullet devices</span>
                                     <select name="pushbullet_device_list" id="pushbullet_device_list" class="form-control input-sm"></select>
                                     <input type="hidden" id="pushbullet_device" value="${sickbeard.PUSHBULLET_DEVICE}">
-                                    <input type="button" class="btn btn-inline" value="Update device list" id="getPushbulletDevices" />
+                                    <input type="button" class="btn btn-inline" value="Update device list" id="getPushbulletDevices"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1304,8 +1304,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testPushbullet-result">Click below to test.</div>
-                            <input type="button" class="btn" value="Test Pushbullet" id="testPushbullet" />
-                            <input type="submit" class="btn config_submitter" value="Save Changes" />
+                            <input type="button" class="btn" value="Test Pushbullet" id="testPushbullet"  autocapitalize="off" />
+                            <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_pushbullet //-->
 
                     </fieldset>
@@ -1321,7 +1321,7 @@
                             <label for="use_freemobile">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_freemobile" id="use_freemobile" ${('', 'checked="checked"')[bool(sickbeard.USE_FREEMOBILE)]}/>
+                                    <input type="checkbox" class="enabler" name="use_freemobile" id="use_freemobile" ${('', 'checked="checked"')[bool(sickbeard.USE_FREEMOBILE)]} autocapitalize="off" />
                                     <p>should SickRage send SMS notifications ?</p>
                                 </span>
                             </label>
@@ -1332,7 +1332,7 @@
                                 <label for="freemobile_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="freemobile_notify_onsnatch" id="freemobile_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.FREEMOBILE_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="freemobile_notify_onsnatch" id="freemobile_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.FREEMOBILE_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a SMS when a download starts ?</p>
                                     </span>
                                 </label>
@@ -1341,7 +1341,7 @@
                                 <label for="freemobile_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="freemobile_notify_ondownload" id="freemobile_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.FREEMOBILE_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="freemobile_notify_ondownload" id="freemobile_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.FREEMOBILE_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a SMS when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -1350,7 +1350,7 @@
                                 <label for="freemobile_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="freemobile_notify_onsubtitledownload" id="freemobile_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.FREEMOBILE_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="freemobile_notify_onsubtitledownload" id="freemobile_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.FREEMOBILE_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a SMS when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -1358,7 +1358,7 @@
                             <div class="field-pair">
                                 <label for="freemobile_id">
                                     <span class="component-title">Free Mobile customer ID</span>
-                                    <input type="text" name="freemobile_id" id="freemobile_id" value="${sickbeard.FREEMOBILE_ID}" class="form-control input-sm input250" />
+                                    <input type="text" name="freemobile_id" id="freemobile_id" value="${sickbeard.FREEMOBILE_ID}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1368,7 +1368,7 @@
                             <div class="field-pair">
                                 <label for="freemobile_password">
                                     <span class="component-title">Free Mobile API Key</span>
-                                    <input type="text" name="freemobile_apikey" id="freemobile_apikey" value="${sickbeard.FREEMOBILE_APIKEY}" class="form-control input-sm input250" />
+                                    <input type="text" name="freemobile_apikey" id="freemobile_apikey" value="${sickbeard.FREEMOBILE_APIKEY}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1376,8 +1376,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testFreeMobile-result">Click below to test your settings.</div>
-                            <input  class="btn" type="button" value="Test SMS" id="testFreeMobile" />
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input  class="btn" type="button" value="Test SMS" id="testFreeMobile"  autocapitalize="off" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_freemobile //-->
 
                     </fieldset>
@@ -1397,7 +1397,7 @@
                             <label for="use_twitter">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_twitter" id="use_twitter" ${('', 'checked="checked"')[bool(sickbeard.USE_TWITTER)]}/>
+                                    <input type="checkbox" class="enabler" name="use_twitter" id="use_twitter" ${('', 'checked="checked"')[bool(sickbeard.USE_TWITTER)]} autocapitalize="off" />
                                     <p>should SickRage post tweets on Twitter ?</p>
                                 </span>
                             </label>
@@ -1412,7 +1412,7 @@
                                 <label for="twitter_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="twitter_notify_onsnatch" id="twitter_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.TWITTER_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="twitter_notify_onsnatch" id="twitter_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.TWITTER_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -1421,7 +1421,7 @@
                                 <label for="twitter_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="twitter_notify_ondownload" id="twitter_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.TWITTER_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="twitter_notify_ondownload" id="twitter_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.TWITTER_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -1430,7 +1430,7 @@
                                 <label for="twitter_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="twitter_notify_onsubtitledownload" id="twitter_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.TWITTER_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="twitter_notify_onsubtitledownload" id="twitter_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.TWITTER_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -1439,7 +1439,7 @@
                                 <label for="twitter_usedm">
                                     <span class="component-title">Send direct message</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="twitter_usedm" id="twitter_usedm" ${('', 'checked="checked"')[bool(sickbeard.TWITTER_USEDM)]}/>
+                                        <input type="checkbox" name="twitter_usedm" id="twitter_usedm" ${('', 'checked="checked"')[bool(sickbeard.TWITTER_USEDM)]} autocapitalize="off" />
                                         <p>send a notification via Direct Message, not via status update</p>
                                     </span>
                                 </label>
@@ -1447,7 +1447,7 @@
                             <div class="field-pair">
                                 <label for="twitter_dmto">
                                     <span class="component-title">Send DM to</span>
-                                    <input type="text" name="twitter_dmto" id="twitter_dmto" value="${sickbeard.TWITTER_DMTO}" class="form-control input-sm input250" />
+                                    <input type="text" name="twitter_dmto" id="twitter_dmto" value="${sickbeard.TWITTER_DMTO}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <p>
                                     <span class="component-desc">Twitter account to send Direct Messages to (must follow you)</span>
@@ -1459,7 +1459,7 @@
                                 </label>
                                 <label>
                                     <span style="font-size: 11px;">Click the "Request Authorization" button.<br> This will open a new page containing an auth key.<br> <b>Note:</b> if nothing happens check your popup blocker.<br></span>
-                                    <input class="btn" type="button" value="Request Authorization" id="twitterStep1" />
+                                    <input class="btn" type="button" value="Request Authorization" id="twitterStep1"  autocapitalize="off" />
                                 </label>
                             </div>
                             <div class="field-pair">
@@ -1468,8 +1468,8 @@
                                 </label>
                                 <label>
                                     <span style="font-size: 11px;">Enter the key Twitter gave you below, and click "Verify Key".<br><br></span>
-                                    <input type="text" id="twitter_key" value="" class="form-control input-sm input350" />
-                                    <input class="btn btn-inline" type="button" value="Verify Key" id="twitterStep2" />
+                                    <input type="text" id="twitter_key" value="" class="form-control input-sm input350"  autocapitalize="off" />
+                                    <input class="btn btn-inline" type="button" value="Verify Key" id="twitterStep2"  autocapitalize="off" />
                                 </label>
                             </div>
                             <!--
@@ -1480,8 +1480,8 @@
                             </div>
                             //-->
                             <div class="testNotification" id="testTwitter-result">Click below to test.</div>
-                            <input  class="btn" type="button" value="Test Twitter" id="testTwitter" />
-                            <input type="submit" class="config_submitter btn" value="Save Changes" />
+                            <input  class="btn" type="button" value="Test Twitter" id="testTwitter"  autocapitalize="off" />
+                            <input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_twitter //-->
 
                     </fieldset>
@@ -1499,7 +1499,7 @@
                             <label for="use_trakt">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_trakt" id="use_trakt" ${('', 'checked="checked"')[bool(sickbeard.USE_TRAKT)]}/>
+                                    <input type="checkbox" class="enabler" name="use_trakt" id="use_trakt" ${('', 'checked="checked"')[bool(sickbeard.USE_TRAKT)]} autocapitalize="off" />
                                     <p>should SickRage send Trakt.tv notifications ?</p>
                                 </span>
                             </label>
@@ -1509,28 +1509,28 @@
                             <div class="field-pair">
                                 <label for="trakt_username">
                                     <span class="component-title">Trakt username</span>
-                                    <input type="text" name="trakt_username" id="trakt_username" value="${sickbeard.TRAKT_USERNAME}" class="form-control input-sm input250" />
+                                    <input type="text" name="trakt_username" id="trakt_username" value="${sickbeard.TRAKT_USERNAME}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <p>
                                     <span class="component-desc">username of your Trakt account.</span>
                                 </p>
                             </div>
                             <input type="hidden" id="trakt_pin_url" value="${sickbeard.TRAKT_PIN_URL}">
-                            <input type="button" class="btn ${('', 'hide')[bool(sickbeard.TRAKT_ACCESS_TOKEN)]}" value="Get Trakt PIN" id="TraktGetPin" />
+                            <input type="button" class="btn ${('', 'hide')[bool(sickbeard.TRAKT_ACCESS_TOKEN)]}" value="Get Trakt PIN" id="TraktGetPin"  autocapitalize="off" />
                             <div class="field-pair">
                                 <label for="trakt_pin">
                                     <span class="component-title">Trakt PIN</span>
-                                    <input type="text" name="trakt_pin" id="trakt_pin" value="" class="form-control input-sm input250" />
+                                    <input type="text" name="trakt_pin" id="trakt_pin" value="" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <p>
                                     <span class="component-desc">PIN code to authorize SickRage to access Trakt on your behalf.</span>
                                 </p>
                             </div>
-                            <input type="button" class="btn hide" value="Authorize SickRage" id="authTrakt" />
+                            <input type="button" class="btn hide" value="Authorize SickRage" id="authTrakt"  autocapitalize="off" />
                             <div class="field-pair">
                                 <label for="trakt_timeout">
                                     <span class="component-title">API Timeout</span>
-                                    <input type="text" name="trakt_timeout" id="trakt_timeout" value="${sickbeard.TRAKT_TIMEOUT}" class="form-control input-sm input75" />
+                                    <input type="text" name="trakt_timeout" id="trakt_timeout" value="${sickbeard.TRAKT_TIMEOUT}" class="form-control input-sm input75"  autocapitalize="off" />
                                 </label>
                                 <p>
                                     <span class="component-desc">
@@ -1554,7 +1554,7 @@
                                 <label for="trakt_sync">
                                     <span class="component-title">Sync libraries</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" class="enabler" name="trakt_sync" id="trakt_sync" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_SYNC)]}/>
+                                        <input type="checkbox" class="enabler" name="trakt_sync" id="trakt_sync" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_SYNC)]} autocapitalize="off" />
                                         <p>sync your SickRage show library with your trakt show library.</p>
                                     </span>
                                 </label>
@@ -1564,7 +1564,7 @@
                                     <label for="trakt_sync_remove">
                                         <span class="component-title">Remove Episodes From Collection</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="trakt_sync_remove" id="trakt_sync_remove" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_SYNC_REMOVE)]}/>
+                                            <input type="checkbox" name="trakt_sync_remove" id="trakt_sync_remove" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_SYNC_REMOVE)]} autocapitalize="off" />
                                             <p>Remove an Episode from your Trakt Collection if it is not in your SickRage Library.</p>
                                         </span>
                                     </label>
@@ -1574,7 +1574,7 @@
                                 <label for="trakt_sync_watchlist">
                                     <span class="component-title">Sync watchlist</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" class="enabler" name="trakt_sync_watchlist" id="trakt_sync_watchlist" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_SYNC_WATCHLIST)]}/>
+                                        <input type="checkbox" class="enabler" name="trakt_sync_watchlist" id="trakt_sync_watchlist" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_SYNC_WATCHLIST)]} autocapitalize="off" />
                                         <p>sync your SickRage show watchlist with your trakt show watchlist (either Show and Episode).</p>
                                         <p>Episode will be added on watch list when wanted or snatched and will be removed when downloaded </p>
                                     </span>
@@ -1599,7 +1599,7 @@
                                     <label for="trakt_remove_watchlist">
                                         <span class="component-title">Remove episode</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="trakt_remove_watchlist" id="trakt_remove_watchlist" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_REMOVE_WATCHLIST)]}/>
+                                            <input type="checkbox" name="trakt_remove_watchlist" id="trakt_remove_watchlist" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_REMOVE_WATCHLIST)]} autocapitalize="off" />
                                             <p>remove an episode from your watchlist after it is downloaded.</p>
                                         </span>
                                     </label>
@@ -1608,7 +1608,7 @@
                                     <label for="trakt_remove_serieslist">
                                         <span class="component-title">Remove series</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="trakt_remove_serieslist" id="trakt_remove_serieslist" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_REMOVE_SERIESLIST)]}/>
+                                            <input type="checkbox" name="trakt_remove_serieslist" id="trakt_remove_serieslist" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_REMOVE_SERIESLIST)]} autocapitalize="off" />
                                             <p>remove the whole series from your watchlist after any download.</p>
                                         </span>
                                     </label>
@@ -1617,7 +1617,7 @@
                                     <label for="trakt_remove_show_from_sickrage">
                                         <span class="component-title">Remove watched show:</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="trakt_remove_show_from_sickrage" id="trakt_remove_show_from_sickrage" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_REMOVE_SHOW_FROM_SICKRAGE)]}/>
+                                            <input type="checkbox" name="trakt_remove_show_from_sickrage" id="trakt_remove_show_from_sickrage" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_REMOVE_SHOW_FROM_SICKRAGE)]} autocapitalize="off" />
                                             <p>remove the show from sickrage if it's ended and completely watched</p>
                                         </span>
                                     </label>
@@ -1626,7 +1626,7 @@
                                     <label for="trakt_start_paused">
                                         <span class="component-title">Start paused</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="trakt_start_paused" id="trakt_start_paused" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_START_PAUSED)]}/>
+                                            <input type="checkbox" name="trakt_start_paused" id="trakt_start_paused" ${('', 'checked="checked"')[bool(sickbeard.TRAKT_START_PAUSED)]} autocapitalize="off" />
                                             <p>shows grabbed from your trakt watchlist start paused.</p>
                                         </span>
                                     </label>
@@ -1635,7 +1635,7 @@
                             <div class="field-pair">
                                 <label for="trakt_blacklist_name">
                                     <span class="component-title">Trakt blackList name</span>
-                                    <input type="text" name="trakt_blacklist_name" id="trakt_blacklist_name" value="${sickbeard.TRAKT_BLACKLIST_NAME}" class="form-control input-sm input150" />
+                                    <input type="text" name="trakt_blacklist_name" id="trakt_blacklist_name" value="${sickbeard.TRAKT_BLACKLIST_NAME}" class="form-control input-sm input150"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1643,8 +1643,8 @@
                                 </label>
                             </div>
                             <div class="testNotification" id="testTrakt-result">Click below to test.</div>
-                            <input type="button" class="btn" value="Test Trakt" id="testTrakt" />
-                            <input type="submit" class="btn config_submitter" value="Save Changes" />
+                            <input type="button" class="btn" value="Test Trakt" id="testTrakt"  autocapitalize="off" />
+                            <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_trakt //-->
                     </fieldset>
                 </div><!-- /trakt component-group //-->
@@ -1660,7 +1660,7 @@
                             <label for="use_email">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="use_email" id="use_email" ${('', 'checked="checked"')[bool(sickbeard.USE_EMAIL)]}/>
+                                    <input type="checkbox" class="enabler" name="use_email" id="use_email" ${('', 'checked="checked"')[bool(sickbeard.USE_EMAIL)]} autocapitalize="off" />
                                     <p>should SickRage send email notifications ?</p>
                                 </span>
                             </label>
@@ -1671,7 +1671,7 @@
                                 <label for="email_notify_onsnatch">
                                     <span class="component-title">Notify on snatch</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="email_notify_onsnatch" id="email_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.EMAIL_NOTIFY_ONSNATCH)]}/>
+                                        <input type="checkbox" name="email_notify_onsnatch" id="email_notify_onsnatch" ${('', 'checked="checked"')[bool(sickbeard.EMAIL_NOTIFY_ONSNATCH)]} autocapitalize="off" />
                                         <p>send a notification when a download starts ?</p>
                                     </span>
                                 </label>
@@ -1680,7 +1680,7 @@
                                 <label for="email_notify_ondownload">
                                     <span class="component-title">Notify on download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="email_notify_ondownload" id="email_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.EMAIL_NOTIFY_ONDOWNLOAD)]}/>
+                                        <input type="checkbox" name="email_notify_ondownload" id="email_notify_ondownload" ${('', 'checked="checked"')[bool(sickbeard.EMAIL_NOTIFY_ONDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when a download finishes ?</p>
                                     </span>
                                 </label>
@@ -1689,7 +1689,7 @@
                                 <label for="email_notify_onsubtitledownload">
                                     <span class="component-title">Notify on subtitle download</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="email_notify_onsubtitledownload" id="email_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.EMAIL_NOTIFY_ONSUBTITLEDOWNLOAD)]}/>
+                                        <input type="checkbox" name="email_notify_onsubtitledownload" id="email_notify_onsubtitledownload" ${('', 'checked="checked"')[bool(sickbeard.EMAIL_NOTIFY_ONSUBTITLEDOWNLOAD)]} autocapitalize="off" />
                                         <p>send a notification when subtitles are downloaded ?</p>
                                     </span>
                                 </label>
@@ -1697,7 +1697,7 @@
                             <div class="field-pair">
                                 <label for="email_host">
                                     <span class="component-title">SMTP host</span>
-                                    <input type="text" name="email_host" id="email_host" value="${sickbeard.EMAIL_HOST}" class="form-control input-sm input250" />
+                                    <input type="text" name="email_host" id="email_host" value="${sickbeard.EMAIL_HOST}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1707,7 +1707,7 @@
                             <div class="field-pair">
                                 <label for="email_port">
                                     <span class="component-title">SMTP port</span>
-                                    <input type="text" name="email_port" id="email_port" value="${sickbeard.EMAIL_PORT}" class="form-control input-sm input75" />
+                                    <input type="text" name="email_port" id="email_port" value="${sickbeard.EMAIL_PORT}" class="form-control input-sm input75"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1717,7 +1717,7 @@
                             <div class="field-pair">
                                 <label for="email_from">
                                     <span class="component-title">SMTP from</span>
-                                    <input type="text" name="email_from" id="email_from" value="${sickbeard.EMAIL_FROM}" class="form-control input-sm input250" />
+                                    <input type="text" name="email_from" id="email_from" value="${sickbeard.EMAIL_FROM}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1728,7 +1728,7 @@
                                 <label for="email_tls">
                                     <span class="component-title">Use TLS</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="email_tls" id="email_tls" ${('', 'checked="checked"')[bool(sickbeard.EMAIL_TLS)]}/>
+                                        <input type="checkbox" name="email_tls" id="email_tls" ${('', 'checked="checked"')[bool(sickbeard.EMAIL_TLS)]} autocapitalize="off" />
                                         <p>check to use TLS encryption.</p>
                                     </span>
                                 </label>
@@ -1736,7 +1736,7 @@
                             <div class="field-pair">
                                 <label for="email_user">
                                     <span class="component-title">SMTP user</span>
-                                    <input type="text" name="email_user" id="email_user" value="${sickbeard.EMAIL_USER}" class="form-control input-sm input250" />
+                                    <input type="text" name="email_user" id="email_user" value="${sickbeard.EMAIL_USER}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1746,7 +1746,7 @@
                             <div class="field-pair">
                                 <label for="email_password">
                                     <span class="component-title">SMTP password</span>
-                                    <input type="password" name="email_password" id="email_password" value="${sickbeard.EMAIL_PASSWORD}" class="form-control input-sm input250" />
+                                    <input type="password" name="email_password" id="email_password" value="${sickbeard.EMAIL_PASSWORD}" class="form-control input-sm input250"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1756,7 +1756,7 @@
                             <div class="field-pair">
                                 <label for="email_list">
                                     <span class="component-title">Global email list</span>
-                                    <input type="text" name="email_list" id="email_list" value="${sickbeard.EMAIL_LIST}" class="form-control input-sm input350" />
+                                    <input type="text" name="email_list" id="email_list" value="${sickbeard.EMAIL_LIST}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1773,7 +1773,7 @@
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
-                                    <input type="text" name="email_show_list" id="email_show_list" class="form-control input-sm input350" />
+                                    <input type="text" name="email_show_list" id="email_show_list" class="form-control input-sm input350"  autocapitalize="off" />
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
@@ -1783,13 +1783,13 @@
                                 </label>
                                 <label>
                                     <span class="component-title">&nbsp;</span>
-                                    <input id="email_show_save" class="btn" type="button" value="Save for this show" />
+                                    <input id="email_show_save" class="btn" type="button" value="Save for this show"  autocapitalize="off" />
                                 </label>
                             </div>
 
                             <div class="testNotification" id="testEmail-result">Click below to test.</div>
-                            <input class="btn" type="button" value="Test Email" id="testEmail" />
-                            <input class="btn" type="submit" class="config_submitter" value="Save Changes" />
+                            <input class="btn" type="button" value="Test Email" id="testEmail"  autocapitalize="off" />
+                            <input class="btn" type="submit" class="config_submitter" value="Save Changes"  autocapitalize="off" />
                         </div><!-- /content_use_email //-->
                     </fieldset>
                 </div><!-- /email component-group //-->
@@ -1797,7 +1797,7 @@
             </div><!-- /config-components //-->
         </form>
 
-        <br><input type="submit" class="config_submitter btn" value="Save Changes" /><br>
+        <br><input type="submit" class="config_submitter btn" value="Save Changes"  autocapitalize="off" /><br>
 
     </div>
 </div>
diff --git a/gui/slick/views/config_postProcessing.mako b/gui/slick/views/config_postProcessing.mako
index 51ce0a4c1fd014150e86ef64a76dac7cf40c1223..5c127bede7a364759b1a2013f9e8f98b950a71ca 100644
--- a/gui/slick/views/config_postProcessing.mako
+++ b/gui/slick/views/config_postProcessing.mako
@@ -33,7 +33,7 @@
                     </div>
                     <fieldset class="component-group-list">
                         <div class="field-pair">
-                            <input type="checkbox" name="process_automatically" id="process_automatically" ${('', 'checked="checked"')[bool(sickbeard.PROCESS_AUTOMATICALLY)]}/>
+                            <input type="checkbox" name="process_automatically" id="process_automatically" ${('', 'checked="checked"')[bool(sickbeard.PROCESS_AUTOMATICALLY)]} autocapitalize="off" />
                             <label for="process_automatically">
                                 <span class="component-title">Enable</span>
                                 <span class="component-desc">Enable the automatic post processor to scan and process any files in your <i>Post Processing Dir</i>?</span>
@@ -46,7 +46,7 @@
                         <div class="field-pair">
                             <label class="nocheck" for="tv_download_dir">
                                 <span class="component-title">Post Processing Dir</span>
-                                <input type="text" name="tv_download_dir" id="tv_download_dir" value="${sickbeard.TV_DOWNLOAD_DIR}" class="form-control input-sm input350" />
+                                <input type="text" name="tv_download_dir" id="tv_download_dir" value="${sickbeard.TV_DOWNLOAD_DIR}" class="form-control input-sm input350"  autocapitalize="off" />
                             </label>
                             <label class="nocheck">
                                 <span class="component-title">&nbsp;</span>
@@ -81,7 +81,7 @@
                         <div class="field-pair">
                             <label class="nocheck">
                                 <span class="component-title">Auto Post-Processing Frequency</span>
-                                <input type="number" min="10" name="autopostprocesser_frequency" id="autopostprocesser_frequency" value="${sickbeard.AUTOPOSTPROCESSER_FREQUENCY}" class="form-control input-sm input75" />
+                                <input type="number" min="10" name="autopostprocesser_frequency" id="autopostprocesser_frequency" value="${sickbeard.AUTOPOSTPROCESSER_FREQUENCY}" class="form-control input-sm input75"  autocapitalize="off" />
                             </label>
                             <label class="nocheck">
                                 <span class="component-title">&nbsp;</span>
@@ -89,7 +89,7 @@
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input type="checkbox" name="postpone_if_sync_files" id="postpone_if_sync_files" ${('', 'checked="checked"')[bool(sickbeard.POSTPONE_IF_SYNC_FILES)]}/>
+                            <input type="checkbox" name="postpone_if_sync_files" id="postpone_if_sync_files" ${('', 'checked="checked"')[bool(sickbeard.POSTPONE_IF_SYNC_FILES)]} autocapitalize="off" />
                             <label for="postpone_if_sync_files">
                                 <span class="component-title">Postpone post processing</span>
                                 <span class="component-desc">Wait to process a folder if sync files are present.</span>
@@ -98,7 +98,7 @@
                         <div class="field-pair">
                             <label class="nocheck">
                                 <span class="component-title">Sync File Extensions</span>
-                                <input type="text" name="sync_files" id="sync_files" value="${sickbeard.SYNC_FILES}" class="form-control input-sm input350" />
+                                <input type="text" name="sync_files" id="sync_files" value="${sickbeard.SYNC_FILES}" class="form-control input-sm input350"  autocapitalize="off" />
                             </label>
                             <label class="nocheck">
                                 <span class="component-title">&nbsp;</span>
@@ -106,7 +106,7 @@
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input type="checkbox" name="postpone_if_no_subs" id="postpone_if_no_subs" ${('', 'checked="checked"')[bool(sickbeard.POSTPONE_IF_NO_SUBS)]}/>
+                            <input type="checkbox" name="postpone_if_no_subs" id="postpone_if_no_subs" ${('', 'checked="checked"')[bool(sickbeard.POSTPONE_IF_NO_SUBS)]} autocapitalize="off" />
                             <label for="postpone_if_no_subs">
                                 <span class="component-title">Postpone if no subtitle</span>
                                 <span class="component-desc">Wait to process a file until subtitles are present</span>
@@ -114,28 +114,28 @@
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input type="checkbox" name="rename_episodes" id="rename_episodes" ${('', 'checked="checked"')[bool(sickbeard.RENAME_EPISODES)]}/>
+                            <input type="checkbox" name="rename_episodes" id="rename_episodes" ${('', 'checked="checked"')[bool(sickbeard.RENAME_EPISODES)]} autocapitalize="off" />
                             <label for="rename_episodes">
                                 <span class="component-title">Rename Episodes</span>
                                 <span class="component-desc">Rename episode using the Episode Naming settings?</span>
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input type="checkbox" name="create_missing_show_dirs" id="create_missing_show_dirs" ${('', 'checked="checked"')[bool(sickbeard.CREATE_MISSING_SHOW_DIRS)]}/>
+                            <input type="checkbox" name="create_missing_show_dirs" id="create_missing_show_dirs" ${('', 'checked="checked"')[bool(sickbeard.CREATE_MISSING_SHOW_DIRS)]} autocapitalize="off" />
                             <label for="create_missing_show_dirs">
                                 <span class="component-title">Create missing show directories</span>
                                 <span class="component-desc">Create missing show directories when they get deleted</span>
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input type="checkbox" name="add_shows_wo_dir" id="add_shows_wo_dir" ${('', 'checked="checked"')[bool(sickbeard.ADD_SHOWS_WO_DIR)]}/>
+                            <input type="checkbox" name="add_shows_wo_dir" id="add_shows_wo_dir" ${('', 'checked="checked"')[bool(sickbeard.ADD_SHOWS_WO_DIR)]} autocapitalize="off" />
                             <label for="add_shows_wo_dir">
                                 <span class="component-title">Add shows without directory</span>
                                 <span class="component-desc">Add shows without creating a directory (not recommended)</span>
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input type="checkbox" name="move_associated_files" id="move_associated_files" ${('', 'checked="checked"')[bool(sickbeard.MOVE_ASSOCIATED_FILES)]}/>
+                            <input type="checkbox" name="move_associated_files" id="move_associated_files" ${('', 'checked="checked"')[bool(sickbeard.MOVE_ASSOCIATED_FILES)]} autocapitalize="off" />
                             <label for="move_associated_files">
                                 <span class="component-title">Move Associated Files</span>
                                 <span class="component-desc">Move srr/sfv/etc files with the episode when processed?</span>
@@ -144,7 +144,7 @@
                         <div class="field-pair">
                             <label class="nocheck">
                                 <span class="component-title">Allowed associated file extensions</span>
-                                <input type="text" name="allowed_extensions" id="allowed_extensions" value="${sickbeard.ALLOWED_EXTENSIONS}" class="form-control input-sm input350" />
+                                <input type="text" name="allowed_extensions" id="allowed_extensions" value="${sickbeard.ALLOWED_EXTENSIONS}" class="form-control input-sm input350"  autocapitalize="off" />
                             </label>
                             <label class="nocheck">
                                 <span class="component-title">&nbsp;</span>
@@ -152,14 +152,14 @@
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input type="checkbox" name="nfo_rename" id="nfo_rename" ${('', 'checked="checked"')[bool(sickbeard.NFO_RENAME)]}/>
+                            <input type="checkbox" name="nfo_rename" id="nfo_rename" ${('', 'checked="checked"')[bool(sickbeard.NFO_RENAME)]} autocapitalize="off" />
                             <label for="nfo_rename">
                                 <span class="component-title">Rename .nfo file</span>
                                 <span class="component-desc">Rename the original .nfo file to .nfo-orig to avoid conflicts?</span>
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input type="checkbox" name="airdate_episodes" id="airdate_episodes" ${('', 'checked="checked"')[bool(sickbeard.AIRDATE_EPISODES)]}/>
+                            <input type="checkbox" name="airdate_episodes" id="airdate_episodes" ${('', 'checked="checked"')[bool(sickbeard.AIRDATE_EPISODES)]} autocapitalize="off" />
                             <label for="airdate_episodes">
                                 <span class="component-title">Change File Date</span>
                                 <span class="component-desc">Set last modified filedate to the date that the episode aired?</span>
@@ -186,7 +186,7 @@
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input id="unpack" type="checkbox" name="unpack" ${('', 'checked="checked"')[bool(sickbeard.UNPACK)]} />
+                            <input id="unpack" type="checkbox" name="unpack" ${('', 'checked="checked"')[bool(sickbeard.UNPACK)]}  autocapitalize="off" />
                             <label for="unpack">
                                 <span class="component-title">Unpack</span>
                                 <span class="component-desc">Unpack any TV releases in your <i>TV Download Dir</i>?</span>
@@ -197,14 +197,14 @@
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input type="checkbox" name="del_rar_contents" id="del_rar_contents" ${('', 'checked="checked"')[bool(sickbeard.DELRARCONTENTS)]}/>
+                            <input type="checkbox" name="del_rar_contents" id="del_rar_contents" ${('', 'checked="checked"')[bool(sickbeard.DELRARCONTENTS)]} autocapitalize="off" />
                             <label for="del_rar_contents">
                                 <span class="component-title">Delete RAR contents</span>
                                 <span class="component-desc">Delete content of RAR files, even if Process Method not set to move?</span>
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input type="checkbox" name="no_delete" id="no_delete" ${('', 'checked="checked"')[bool(sickbeard.NO_DELETE)]}/>
+                            <input type="checkbox" name="no_delete" id="no_delete" ${('', 'checked="checked"')[bool(sickbeard.NO_DELETE)]} autocapitalize="off" />
                             <label for="no_delete">
                                 <span class="component-title">Don't delete empty folders</span>
                                 <span class="component-desc">Leave empty folders when Post Processing?</span>
@@ -215,7 +215,7 @@
                             </label>
                         </div>
                         <div class="field-pair">
-                            <input id="use_failed_downloads" type="checkbox" class="enabler" name="use_failed_downloads" ${('', 'checked="checked"')[bool(sickbeard.USE_FAILED_DOWNLOADS)]}/>
+                            <input id="use_failed_downloads" type="checkbox" class="enabler" name="use_failed_downloads" ${('', 'checked="checked"')[bool(sickbeard.USE_FAILED_DOWNLOADS)]} autocapitalize="off" />
                             <label for="use_failed_downloads">
                                 <span class="component-title">Use Failed Downloads</span>
                                 <span class="component-desc">Use Failed Download Handling?</span>
@@ -226,7 +226,7 @@
                         </div>
                         <div id="content_use_failed_downloads">
                             <div class="field-pair">
-                                <input id="delete_failed" type="checkbox" name="delete_failed" ${('', 'checked="checked"')[bool(sickbeard.DELETE_FAILED)]}/>
+                                <input id="delete_failed" type="checkbox" name="delete_failed" ${('', 'checked="checked"')[bool(sickbeard.DELETE_FAILED)]} autocapitalize="off" />
                                 <label for="delete_failed">
                                     <span class="component-title">Delete Failed</span>
                                     <span class="component-desc">Delete files left over from a failed download?</span>
@@ -240,14 +240,14 @@
                         <div class="field-pair">
                             <label class="nocheck">
                                 <span class="component-title">Extra Scripts</span>
-                                <input type="text" name="extra_scripts" value="${'|'.join(sickbeard.EXTRA_SCRIPTS)}" class="form-control input-sm input350" />
+                                <input type="text" name="extra_scripts" value="${'|'.join(sickbeard.EXTRA_SCRIPTS)}" class="form-control input-sm input350"  autocapitalize="off" />
                             </label>
                             <label class="nocheck">
                                 <span class="component-title">&nbsp;</span>
                                 <span class="component-desc">See <a href="https://github.com/SickRage/sickrage-issues/wiki/Post-Processing#extra-scripts"><font color='red'><b>Wiki</b></font></a> for script arguments description and usage.</span>
                             </label>
                         </div>
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
                     </fieldset>
                 </div><!-- /component-group1 //-->
                 <div id="core-component-group2" class="component-group">
@@ -284,7 +284,7 @@
                                         &nbsp;
                                     </span>
                                     <span class="component-desc">
-                                        <input type="text" name="naming_pattern" id="naming_pattern" value="${sickbeard.NAMING_PATTERN}" class="form-control input-sm input350" />
+                                        <input type="text" name="naming_pattern" id="naming_pattern" value="${sickbeard.NAMING_PATTERN}" class="form-control input-sm input350"  autocapitalize="off" />
                                         <img src="${srRoot}/images/legend16.png" width="16" height="16" alt="[Toggle Key]" id="show_naming_key" title="Toggle Naming Legend" class="legend" class="legend" />
                                     </span>
                                 </label>
@@ -394,6 +394,21 @@
                                           <td>%Y</td>
                                           <td>${datetime.date.today().year}</td>
                                         </tr>                                  
+                                        <tr>
+                                          <td class="align-right"><b>Post-Processing Date:</b></td>
+                                          <td>%CM</td>
+                                          <td>${datetime.date.today().month}</td>
+                                        </tr>
+                                        <tr class="even">
+                                          <td>&nbsp;</td>
+                                          <td>%CD</td>
+                                          <td>${datetime.date.today().day}</td>
+                                        </tr>
+                                        <tr>
+                                          <td>&nbsp;</td>
+                                          <td>%CY</td>
+                                          <td>${datetime.date.today().year}</td>
+                                        </tr>                                  
                                         <tr>
                                           <td class="align-right"><b>Quality:</b></td>
                                           <td>%QN</td>
@@ -475,7 +490,7 @@
                         </div>
 
                         <div class="field-pair">
-                            <input type="checkbox" id="naming_strip_year"  name="naming_strip_year" ${('', 'checked="checked"')[bool(sickbeard.NAMING_STRIP_YEAR)]}/>
+                            <input type="checkbox" id="naming_strip_year"  name="naming_strip_year" ${('', 'checked="checked"')[bool(sickbeard.NAMING_STRIP_YEAR)]} autocapitalize="off" />
                             <label for="naming_strip_year">
                                 <span class="component-title">Strip Show Year</span>
                                 <span class="component-desc">Remove the TV show's year when renaming the file?</span>
@@ -487,7 +502,7 @@
                         </div>
 
                         <div class="field-pair">
-                            <input type="checkbox" class="enabler" id="naming_custom_abd" name="naming_custom_abd" ${('', 'checked="checked"')[bool(sickbeard.NAMING_CUSTOM_ABD)]}/>
+                            <input type="checkbox" class="enabler" id="naming_custom_abd" name="naming_custom_abd" ${('', 'checked="checked"')[bool(sickbeard.NAMING_CUSTOM_ABD)]} autocapitalize="off" />
                             <label for="naming_custom_abd">
                                 <span class="component-title">Custom Air-By-Date</span>
                                 <span class="component-desc">Name Air-By-Date shows differently than regular shows?</span>
@@ -521,7 +536,7 @@
                                             &nbsp;
                                         </span>
                                         <span class="component-desc">
-                                            <input type="text" name="naming_abd_pattern" id="naming_abd_pattern" value="${sickbeard.NAMING_ABD_PATTERN}" class="form-control input-sm input350" />
+                                            <input type="text" name="naming_abd_pattern" id="naming_abd_pattern" value="${sickbeard.NAMING_ABD_PATTERN}" class="form-control input-sm input350"  autocapitalize="off" />
                                             <img src="${srRoot}/images/legend16.png" width="16" height="16" alt="[Toggle Key]" id="show_naming_abd_key" title="Toggle ABD Naming Legend" class="legend" />
                                         </span>
                                     </label>
@@ -664,7 +679,7 @@
                         </div><!-- /naming_abd_different -->
 
                         <div class="field-pair">
-                            <input type="checkbox" class="enabler" id="naming_custom_sports" name="naming_custom_sports" ${('', 'checked="checked"')[bool(sickbeard.NAMING_CUSTOM_SPORTS)]}/>
+                            <input type="checkbox" class="enabler" id="naming_custom_sports" name="naming_custom_sports" ${('', 'checked="checked"')[bool(sickbeard.NAMING_CUSTOM_SPORTS)]} autocapitalize="off" />
                             <label for="naming_custom_sports">
                                 <span class="component-title">Custom Sports</span>
                                 <span class="component-desc">Name Sports shows differently than regular shows?</span>
@@ -698,7 +713,7 @@
                                             &nbsp;
                                         </span>
                                         <span class="component-desc">
-                                            <input type="text" name="naming_sports_pattern" id="naming_sports_pattern" value="${sickbeard.NAMING_SPORTS_PATTERN}" class="form-control input-sm input350" />
+                                            <input type="text" name="naming_sports_pattern" id="naming_sports_pattern" value="${sickbeard.NAMING_SPORTS_PATTERN}" class="form-control input-sm input350"  autocapitalize="off" />
                                             <img src="${srRoot}/images/legend16.png" width="16" height="16" alt="[Toggle Key]" id="show_naming_sports_key" title="Toggle Sports Naming Legend" class="legend" />
                                         </span>
                                     </label>
@@ -842,7 +857,7 @@
 
                         <!-- naming_anime_custom -->
                         <div class="field-pair">
-                            <input type="checkbox" class="enabler" id="naming_custom_anime" name="naming_custom_anime" ${('', 'checked="checked"')[bool(sickbeard.NAMING_CUSTOM_ANIME)]}/>
+                            <input type="checkbox" class="enabler" id="naming_custom_anime" name="naming_custom_anime" ${('', 'checked="checked"')[bool(sickbeard.NAMING_CUSTOM_ANIME)]} autocapitalize="off" />
                             <label for="naming_custom_anime">
                                 <span class="component-title">Custom Anime</span>
                                 <span class="component-desc">Name Anime shows differently than regular shows?</span>
@@ -876,7 +891,7 @@
                                             &nbsp;
                                         </span>
                                         <span class="component-desc">
-                                            <input type="text" name="naming_anime_pattern" id="naming_anime_pattern" value="${sickbeard.NAMING_ANIME_PATTERN}" class="form-control input-sm input350" />
+                                            <input type="text" name="naming_anime_pattern" id="naming_anime_pattern" value="${sickbeard.NAMING_ANIME_PATTERN}" class="form-control input-sm input350"  autocapitalize="off" />
                                             <img src="${srRoot}/images/legend16.png" width="16" height="16" alt="[Toggle Key]" id="show_naming_anime_key" title="Toggle Anime Naming Legend" class="legend" />
                                         </span>
                                     </label>
@@ -1033,7 +1048,7 @@
                             </div>
 
                             <div class="field-pair">
-                                <input type="radio" name="naming_anime" id="naming_anime" value="1" ${('', 'checked="checked"')[sickbeard.NAMING_ANIME == 1]}/>
+                                <input type="radio" name="naming_anime" id="naming_anime" value="1" ${('', 'checked="checked"')[sickbeard.NAMING_ANIME == 1]} autocapitalize="off" />
                                 <label for="naming_anime">
                                     <span class="component-title">Add Absolute Number</span>
                                     <span class="component-desc">Add the absolute number to the season/episode format?</span>
@@ -1045,7 +1060,7 @@
                             </div>
 
                             <div class="field-pair">
-                                <input type="radio" name="naming_anime" id="naming_anime_only" value="2" ${('', 'checked="checked"')[sickbeard.NAMING_ANIME == 2]}/>
+                                <input type="radio" name="naming_anime" id="naming_anime_only" value="2" ${('', 'checked="checked"')[sickbeard.NAMING_ANIME == 2]} autocapitalize="off" />
                                 <label for="naming_anime_only">
                                     <span class="component-title">Only Absolute Number</span>
                                     <span class="component-desc">Replace season/episode format with absolute number</span>
@@ -1057,7 +1072,7 @@
                             </div>
 
                             <div class="field-pair">
-                                <input type="radio" name="naming_anime" id="naming_anime_none" value="3" ${('', 'checked="checked"')[sickbeard.NAMING_ANIME == 3]}/>
+                                <input type="radio" name="naming_anime" id="naming_anime_none" value="3" ${('', 'checked="checked"')[sickbeard.NAMING_ANIME == 3]} autocapitalize="off" />
                                 <label for="naming_anime_none">
                                     <span class="component-title">No Absolute Number</span>
                                     <span class="component-desc">Dont include the absolute number</span>
@@ -1070,7 +1085,7 @@
 
                         </div><!-- /naming_anime_different -->
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
                     </fieldset>
                 </div><!-- /component-group2 //-->
 
@@ -1103,16 +1118,16 @@
                             <div class="metadata_options_wrapper">
                                 <h4>Create:</h4>
                                 <div class="metadata_options">
-                                    <label for="${cur_id}_show_metadata"><input type="checkbox" class="metadata_checkbox" id="${cur_id}_show_metadata" ${('', 'checked="checked"')[bool(cur_metadata_inst.show_metadata)]}/>&nbsp;Show Metadata</label>
-                                    <label for="${cur_id}_episode_metadata"><input type="checkbox" class="metadata_checkbox" id="${cur_id}_episode_metadata" ${('', 'checked="checked"')[bool(cur_metadata_inst.episode_metadata)]}/>&nbsp;Episode Metadata</label>
-                                    <label for="${cur_id}_fanart"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_fanart" ${('', 'checked="checked"')[bool(cur_metadata_inst.fanart)]}/>&nbsp;Show Fanart</label>
-                                    <label for="${cur_id}_poster"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_poster" ${('', 'checked="checked"')[bool(cur_metadata_inst.poster)]}/>&nbsp;Show Poster</label>
-                                    <label for="${cur_id}_banner"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_banner" ${('', 'checked="checked"')[bool(cur_metadata_inst.banner)]}/>&nbsp;Show Banner</label>
-                                    <label for="${cur_id}_episode_thumbnails"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_episode_thumbnails" ${('', 'checked="checked"')[bool(cur_metadata_inst.episode_thumbnails)]}/>&nbsp;Episode Thumbnails</label>
-                                    <label for="${cur_id}_season_posters"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_season_posters" ${('', 'checked="checked"')[bool(cur_metadata_inst.season_posters)]}/>&nbsp;Season Posters</label>
-                                    <label for="${cur_id}_season_banners"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_season_banners" ${('', 'checked="checked"')[bool(cur_metadata_inst.season_banners)]}/>&nbsp;Season Banners</label>
-                                    <label for="${cur_id}_season_all_poster"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_season_all_poster" ${('', 'checked="checked"')[bool(cur_metadata_inst.season_all_poster)]}/>&nbsp;Season All Poster</label>
-                                    <label for="${cur_id}_season_all_banner"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_season_all_banner" ${('', 'checked="checked"')[bool(cur_metadata_inst.season_all_banner)]}/>&nbsp;Season All Banner</label>
+                                    <label for="${cur_id}_show_metadata"><input type="checkbox" class="metadata_checkbox" id="${cur_id}_show_metadata" ${('', 'checked="checked"')[bool(cur_metadata_inst.show_metadata)]} autocapitalize="off" />&nbsp;Show Metadata</label>
+                                    <label for="${cur_id}_episode_metadata"><input type="checkbox" class="metadata_checkbox" id="${cur_id}_episode_metadata" ${('', 'checked="checked"')[bool(cur_metadata_inst.episode_metadata)]} autocapitalize="off" />&nbsp;Episode Metadata</label>
+                                    <label for="${cur_id}_fanart"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_fanart" ${('', 'checked="checked"')[bool(cur_metadata_inst.fanart)]} autocapitalize="off" />&nbsp;Show Fanart</label>
+                                    <label for="${cur_id}_poster"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_poster" ${('', 'checked="checked"')[bool(cur_metadata_inst.poster)]} autocapitalize="off" />&nbsp;Show Poster</label>
+                                    <label for="${cur_id}_banner"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_banner" ${('', 'checked="checked"')[bool(cur_metadata_inst.banner)]} autocapitalize="off" />&nbsp;Show Banner</label>
+                                    <label for="${cur_id}_episode_thumbnails"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_episode_thumbnails" ${('', 'checked="checked"')[bool(cur_metadata_inst.episode_thumbnails)]} autocapitalize="off" />&nbsp;Episode Thumbnails</label>
+                                    <label for="${cur_id}_season_posters"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_season_posters" ${('', 'checked="checked"')[bool(cur_metadata_inst.season_posters)]} autocapitalize="off" />&nbsp;Season Posters</label>
+                                    <label for="${cur_id}_season_banners"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_season_banners" ${('', 'checked="checked"')[bool(cur_metadata_inst.season_banners)]} autocapitalize="off" />&nbsp;Season Banners</label>
+                                    <label for="${cur_id}_season_all_poster"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_season_all_poster" ${('', 'checked="checked"')[bool(cur_metadata_inst.season_all_poster)]} autocapitalize="off" />&nbsp;Season All Poster</label>
+                                    <label for="${cur_id}_season_all_banner"><input type="checkbox" class="float-left metadata_checkbox" id="${cur_id}_season_all_banner" ${('', 'checked="checked"')[bool(cur_metadata_inst.season_all_banner)]} autocapitalize="off" />&nbsp;Season All Banner</label>
                                 </div>
                             </div>
                             <div class="metadata_example_wrapper">
@@ -1130,19 +1145,19 @@
                                     <label for="${cur_id}_season_all_banner"><span id="${cur_id}_eg_season_all_banner">${cur_metadata_inst.eg_season_all_banner}</span></label>
                                 </div>
                             </div>
-                            <input type="hidden" name="${cur_id}_data" id="${cur_id}_data" value="${cur_metadata_inst.get_config()}" />
+                            <input type="hidden" name="${cur_id}_data" id="${cur_id}_data" value="${cur_metadata_inst.get_config()}"  autocapitalize="off" />
                         </div>
                         % endfor
 
                         <div class="clearfix"></div><br>
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
                     </fieldset>
                 </div><!-- /component-group3 //-->
 
                 <br>
                 <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6>
-                <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
+                <input type="submit" class="btn pull-left config_submitter button" value="Save Changes"  autocapitalize="off" />
         </form>
     </div>
 </div>
diff --git a/gui/slick/views/config_providers.mako b/gui/slick/views/config_providers.mako
index 40808db9b0d223fc52864c26f4467b9b0cfc0a23..f787183053f4b277bb9e845732c85f69de3c4cd3 100644
--- a/gui/slick/views/config_providers.mako
+++ b/gui/slick/views/config_providers.mako
@@ -82,7 +82,7 @@ $('#config-components').tabs();
                                     curURL = curProvider.url
                             %>
                             <li class="ui-state-default ${('nzb-provider', 'torrent-provider')[bool(curProvider.providerType == "torrent")]}" id="${curName}">
-                                <input type="checkbox" id="enable_${curName}" class="provider_enabler" ${('', 'checked="checked"')[curProvider.isEnabled() is True]}/>
+                                <input type="checkbox" id="enable_${curName}" class="provider_enabler" ${('', 'checked="checked"')[curProvider.isEnabled() is True]} autocapitalize="off" />
                                 <a href="${anon_url(curURL)}" class="imgLink" rel="noreferrer" onclick="window.open(this.href, '_blank'); return false;"><img src="${srRoot}/images/providers/${curProvider.imageName()}" alt="${curProvider.name}" title="${curProvider.name}" width="16" height="16" style="vertical-align:middle;"/></a>
                                 <span style="vertical-align:middle;">${curProvider.name}</span>
                                 ${('*', '')[bool(curProvider.supportsBacklog)]}
@@ -91,8 +91,8 @@ $('#config-components').tabs();
                             </li>
                         % endfor
                         </ul>
-                        <input type="hidden" name="provider_order" id="provider_order" value="${" ".join([x.getID()+':'+str(int(x.isEnabled())) for x in sickbeard.providers.sortedProviderList()])}"/>
-                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                        <input type="hidden" name="provider_order" id="provider_order" value="${" ".join([x.getID()+':'+str(int(x.isEnabled())) for x in sickbeard.providers.sortedProviderList()])}" autocapitalize="off" />
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
                     </fieldset>
                 </div><!-- /component-group1 //-->
 
@@ -140,7 +140,7 @@ $('#config-components').tabs();
                             <label for="${curNewznabProvider.getID()}_url">
                                 <span class="component-title">URL:</span>
                                 <span class="component-desc">
-                                    <input type="text" id="${curNewznabProvider.getID()}_url" value="${curNewznabProvider.url}" class="form-control input-sm input350" disabled/>
+                                    <input type="text" id="${curNewznabProvider.getID()}_url" value="${curNewznabProvider.url}" class="form-control input-sm input350" disabled autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -148,7 +148,7 @@ $('#config-components').tabs();
                             <label for="${curNewznabProvider.getID()}_hash">
                                 <span class="component-title">API key:</span>
                                 <span class="component-desc">
-                                    <input type="text" id="${curNewznabProvider.getID()}_hash" value="${curNewznabProvider.key}" newznab_name="${curNewznabProvider.getID()}_hash" class="newznab_key form-control input-sm input350" />
+                                    <input type="text" id="${curNewznabProvider.getID()}_hash" value="${curNewznabProvider.key}" newznab_name="${curNewznabProvider.getID()}_hash" class="newznab_key form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -159,7 +159,7 @@ $('#config-components').tabs();
                             <label for="${curNewznabProvider.getID()}_enable_daily">
                                 <span class="component-title">Enable daily searches</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curNewznabProvider.getID()}_enable_daily" id="${curNewznabProvider.getID()}_enable_daily" ${('', 'checked="checked"')[bool(curNewznabProvider.enable_daily)]}/>
+                                    <input type="checkbox" name="${curNewznabProvider.getID()}_enable_daily" id="${curNewznabProvider.getID()}_enable_daily" ${('', 'checked="checked"')[bool(curNewznabProvider.enable_daily)]} autocapitalize="off" />
                                     <p>enable provider to perform daily searches.</p>
                                 </span>
                             </label>
@@ -171,7 +171,7 @@ $('#config-components').tabs();
                             <label for="${curNewznabProvider.getID()}_enable_backlog">
                                 <span class="component-title">Enable backlog searches</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curNewznabProvider.getID()}_enable_backlog" id="${curNewznabProvider.getID()}_enable_backlog" ${('', 'checked="checked"')[bool(curNewznabProvider.enable_backlog and curNewznabProvider.supportsBacklog)]}/>
+                                    <input type="checkbox" name="${curNewznabProvider.getID()}_enable_backlog" id="${curNewznabProvider.getID()}_enable_backlog" ${('', 'checked="checked"')[bool(curNewznabProvider.enable_backlog and curNewznabProvider.supportsBacklog)]} autocapitalize="off" />
                                     <p>enable provider to perform backlog searches.</p>
                                 </span>
                             </label>
@@ -183,7 +183,7 @@ $('#config-components').tabs();
                             <label for="${curNewznabProvider.getID()}_search_fallback">
                                 <span class="component-title">Season search fallback</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curNewznabProvider.getID()}_search_fallback" id="${curNewznabProvider.getID()}_search_fallback" ${('', 'checked="checked"')[bool(curNewznabProvider.search_fallback)]}/>
+                                    <input type="checkbox" name="${curNewznabProvider.getID()}_search_fallback" id="${curNewznabProvider.getID()}_search_fallback" ${('', 'checked="checked"')[bool(curNewznabProvider.search_fallback)]} autocapitalize="off" />
                                     <p>when searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.</p>
                                 </span>
                             </label>
@@ -201,13 +201,13 @@ $('#config-components').tabs();
                             <label>
                                 <span class="component-title"></span>
                                 <span class="component-desc">
-                                    <input type="radio" name="${curNewznabProvider.getID()}_search_mode" id="${curNewznabProvider.getID()}_search_mode_sponly" value="sponly" ${('', 'checked="checked"')[curNewznabProvider.search_mode=="sponly"]}/>season packs only.
+                                    <input type="radio" name="${curNewznabProvider.getID()}_search_mode" id="${curNewznabProvider.getID()}_search_mode_sponly" value="sponly" ${('', 'checked="checked"')[curNewznabProvider.search_mode=="sponly"]} autocapitalize="off" />season packs only.
                                 </span>
                             </label>
                             <label>
                                 <span class="component-title"></span>
                                 <span class="component-desc">
-                                    <input type="radio" name="${curNewznabProvider.getID()}_search_mode" id="${curNewznabProvider.getID()}_search_mode_eponly" value="eponly" ${('', 'checked="checked"')[curNewznabProvider.search_mode=="eponly"]}/>episodes only.
+                                    <input type="radio" name="${curNewznabProvider.getID()}_search_mode" id="${curNewznabProvider.getID()}_search_mode_eponly" value="eponly" ${('', 'checked="checked"')[curNewznabProvider.search_mode=="eponly"]} autocapitalize="off" />episodes only.
                                 </span>
                             </label>
                         </div>
@@ -223,7 +223,7 @@ $('#config-components').tabs();
                             <label for="${curNzbProvider.getID()}_username">
                                 <span class="component-title">Username:</span>
                                 <span class="component-desc">
-                                    <input type="text" name="${curNzbProvider.getID()}_username" value="${curNzbProvider.username}" class="form-control input-sm input350" />
+                                    <input type="text" name="${curNzbProvider.getID()}_username" value="${curNzbProvider.username}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -234,7 +234,7 @@ $('#config-components').tabs();
                             <label for="${curNzbProvider.getID()}_api_key">
                                 <span class="component-title">API key:</span>
                                 <span class="component-desc">
-                                    <input type="text" name="${curNzbProvider.getID()}_api_key" value="${curNzbProvider.api_key}" class="form-control input-sm input350" />
+                                    <input type="text" name="${curNzbProvider.getID()}_api_key" value="${curNzbProvider.api_key}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -246,7 +246,7 @@ $('#config-components').tabs();
                             <label for="${curNzbProvider.getID()}_enable_daily">
                                 <span class="component-title">Enable daily searches</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curNzbProvider.getID()}_enable_daily" id="${curNzbProvider.getID()}_enable_daily" ${('', 'checked="checked"')[bool(curNzbProvider.enable_daily)]}/>
+                                    <input type="checkbox" name="${curNzbProvider.getID()}_enable_daily" id="${curNzbProvider.getID()}_enable_daily" ${('', 'checked="checked"')[bool(curNzbProvider.enable_daily)]} autocapitalize="off" />
                                     <p>enable provider to perform daily searches.</p>
                                 </span>
                             </label>
@@ -258,7 +258,7 @@ $('#config-components').tabs();
                             <label for="${curNzbProvider.getID()}_enable_backlog">
                                 <span class="component-title">Enable backlog searches</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curNzbProvider.getID()}_enable_backlog" id="${curNzbProvider.getID()}_enable_backlog" ${('', 'checked="checked"')[bool(curNzbProvider.enable_backlog and curNzbProvider.supportsBacklog)]}/>
+                                    <input type="checkbox" name="${curNzbProvider.getID()}_enable_backlog" id="${curNzbProvider.getID()}_enable_backlog" ${('', 'checked="checked"')[bool(curNzbProvider.enable_backlog and curNzbProvider.supportsBacklog)]} autocapitalize="off" />
                                     <p>enable provider to perform backlog searches.</p>
                                 </span>
                             </label>
@@ -270,7 +270,7 @@ $('#config-components').tabs();
                             <label for="${curNzbProvider.getID()}_search_fallback">
                                 <span class="component-title">Season search fallback</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curNzbProvider.getID()}_search_fallback" id="${curNzbProvider.getID()}_search_fallback" ${('', 'checked="checked"')[bool(curNzbProvider.search_fallback)]}/>
+                                    <input type="checkbox" name="${curNzbProvider.getID()}_search_fallback" id="${curNzbProvider.getID()}_search_fallback" ${('', 'checked="checked"')[bool(curNzbProvider.search_fallback)]} autocapitalize="off" />
                                     <p>when searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.</p>
                                 </span>
                             </label>
@@ -288,13 +288,13 @@ $('#config-components').tabs();
                             <label>
                                 <span class="component-title"></span>
                                 <span class="component-desc">
-                                    <input type="radio" name="${curNzbProvider.getID()}_search_mode" id="${curNzbProvider.getID()}_search_mode_sponly" value="sponly" ${('', 'checked="checked"')[curNzbProvider.search_mode=="sponly"]}/>season packs only.
+                                    <input type="radio" name="${curNzbProvider.getID()}_search_mode" id="${curNzbProvider.getID()}_search_mode_sponly" value="sponly" ${('', 'checked="checked"')[curNzbProvider.search_mode=="sponly"]} autocapitalize="off" />season packs only.
                                 </span>
                             </label>
                             <label>
                                 <span class="component-title"></span>
                                 <span class="component-desc">
-                                    <input type="radio" name="${curNzbProvider.getID()}_search_mode" id="${curNzbProvider.getID()}_search_mode_eponly" value="eponly" ${('', 'checked="checked"')[curNzbProvider.search_mode=="eponly"]}/>episodes only.
+                                    <input type="radio" name="${curNzbProvider.getID()}_search_mode" id="${curNzbProvider.getID()}_search_mode_eponly" value="eponly" ${('', 'checked="checked"')[curNzbProvider.search_mode=="eponly"]} autocapitalize="off" />episodes only.
                                 </span>
                             </label>
                         </div>
@@ -311,7 +311,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_custom_url">
                                 <span class="component-title">Custom URL:</span>
                                 <span class="component-desc">
-                                    <input type="text" name="${curTorrentProvider.getID()}_custom_url" id="${curTorrentProvider.getID()}_custom_url" value="${curTorrentProvider.custom_url}" class="form-control input-sm input350" />
+                                    <input type="text" name="${curTorrentProvider.getID()}_custom_url" id="${curTorrentProvider.getID()}_custom_url" value="${curTorrentProvider.custom_url}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                             <label>
@@ -328,7 +328,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_api_key">
                                 <span class="component-title">Api key:</span>
                                 <span class="component-desc">
-                                    <input type="text" name="${curTorrentProvider.getID()}_api_key" id="${curTorrentProvider.getID()}_api_key" value="${curTorrentProvider.api_key}" class="form-control input-sm input350" />
+                                    <input type="text" name="${curTorrentProvider.getID()}_api_key" id="${curTorrentProvider.getID()}_api_key" value="${curTorrentProvider.api_key}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -339,7 +339,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_digest">
                                 <span class="component-title">Digest:</span>
                                 <span class="component-desc">
-                                    <input type="text" name="${curTorrentProvider.getID()}_digest" id="${curTorrentProvider.getID()}_digest" value="${curTorrentProvider.digest}" class="form-control input-sm input350" />
+                                    <input type="text" name="${curTorrentProvider.getID()}_digest" id="${curTorrentProvider.getID()}_digest" value="${curTorrentProvider.digest}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -350,7 +350,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_hash">
                                 <span class="component-title">Hash:</span>
                                 <span class="component-desc">
-                                    <input type="text" name="${curTorrentProvider.getID()}_hash" id="${curTorrentProvider.getID()}_hash" value="${curTorrentProvider.hash}" class="form-control input-sm input350" />
+                                    <input type="text" name="${curTorrentProvider.getID()}_hash" id="${curTorrentProvider.getID()}_hash" value="${curTorrentProvider.hash}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -361,7 +361,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_username">
                                 <span class="component-title">Username:</span>
                                 <span class="component-desc">
-                                    <input type="text" name="${curTorrentProvider.getID()}_username" id="${curTorrentProvider.getID()}_username" value="${curTorrentProvider.username}" class="form-control input-sm input350" />
+                                    <input type="text" name="${curTorrentProvider.getID()}_username" id="${curTorrentProvider.getID()}_username" value="${curTorrentProvider.username}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -372,7 +372,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_password">
                                 <span class="component-title">Password:</span>
                                 <span class="component-desc">
-                                    <input type="password" name="${curTorrentProvider.getID()}_password" id="${curTorrentProvider.getID()}_password" value="${curTorrentProvider.password}" class="form-control input-sm input350" />
+                                    <input type="password" name="${curTorrentProvider.getID()}_password" id="${curTorrentProvider.getID()}_password" value="${curTorrentProvider.password}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -383,7 +383,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_passkey">
                                 <span class="component-title">Passkey:</span>
                                 <span class="component-desc">
-                                    <input type="text" name="${curTorrentProvider.getID()}_passkey" id="${curTorrentProvider.getID()}_passkey" value="${curTorrentProvider.passkey}" class="form-control input-sm input350" />
+                                    <input type="text" name="${curTorrentProvider.getID()}_passkey" id="${curTorrentProvider.getID()}_passkey" value="${curTorrentProvider.passkey}" class="form-control input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -394,7 +394,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_pin">
                                 <span class="component-title">Pin:</span>
                                 <span class="component-desc">
-                                    <input type="password" name="${curTorrentProvider.getID()}_pin" id="${curTorrentProvider.getID()}_pin" value="${curTorrentProvider.pin}" class="form-control input-sm input100" />
+                                    <input type="password" name="${curTorrentProvider.getID()}_pin" id="${curTorrentProvider.getID()}_pin" value="${curTorrentProvider.pin}" class="form-control input-sm input100"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -405,7 +405,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_ratio">
                                 <span class="component-title" id="${curTorrentProvider.getID()}_ratio_desc">Seed ratio:</span>
                                 <span class="component-desc">
-                                    <input type="number" step="0.1" name="${curTorrentProvider.getID()}_ratio" id="${curTorrentProvider.getID()}_ratio" value="${curTorrentProvider.ratio}" class="form-control input-sm input75" />
+                                    <input type="number" step="0.1" name="${curTorrentProvider.getID()}_ratio" id="${curTorrentProvider.getID()}_ratio" value="${curTorrentProvider.ratio}" class="form-control input-sm input75"  autocapitalize="off" />
                                 </span>
                             </label>
                             <label>
@@ -422,7 +422,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_minseed">
                                 <span class="component-title" id="${curTorrentProvider.getID()}_minseed_desc">Minimum seeders:</span>
                                 <span class="component-desc">
-                                    <input type="number" name="${curTorrentProvider.getID()}_minseed" id="${curTorrentProvider.getID()}_minseed" value="${curTorrentProvider.minseed}" class="form-control input-sm input75" />
+                                    <input type="number" name="${curTorrentProvider.getID()}_minseed" id="${curTorrentProvider.getID()}_minseed" value="${curTorrentProvider.minseed}" class="form-control input-sm input75"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -433,7 +433,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_minleech">
                                 <span class="component-title" id="${curTorrentProvider.getID()}_minleech_desc">Minimum leechers:</span>
                                 <span class="component-desc">
-                                    <input type="number" name="${curTorrentProvider.getID()}_minleech" id="${curTorrentProvider.getID()}_minleech" value="${curTorrentProvider.minleech}" class="form-control input-sm input75" />
+                                    <input type="number" name="${curTorrentProvider.getID()}_minleech" id="${curTorrentProvider.getID()}_minleech" value="${curTorrentProvider.minleech}" class="form-control input-sm input75"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -444,7 +444,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_confirmed">
                                 <span class="component-title">Confirmed download</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curTorrentProvider.getID()}_confirmed" id="${curTorrentProvider.getID()}_confirmed" ${('', 'checked="checked"')[bool(curTorrentProvider.confirmed)]}/>
+                                    <input type="checkbox" name="${curTorrentProvider.getID()}_confirmed" id="${curTorrentProvider.getID()}_confirmed" ${('', 'checked="checked"')[bool(curTorrentProvider.confirmed)]} autocapitalize="off" />
                                     <p>only download torrents from trusted or verified uploaders ?</p>
                                 </span>
                             </label>
@@ -456,7 +456,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_ranked">
                                 <span class="component-title">Ranked torrents</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curTorrentProvider.getID()}_ranked" id="${curTorrentProvider.getID()}_ranked" ${('', 'checked="checked"')[bool(curTorrentProvider.ranked)]} />
+                                    <input type="checkbox" name="${curTorrentProvider.getID()}_ranked" id="${curTorrentProvider.getID()}_ranked" ${('', 'checked="checked"')[bool(curTorrentProvider.ranked)]}  autocapitalize="off" />
                                     <p>only download ranked torrents (internal releases)</p>
                                 </span>
                             </label>
@@ -468,7 +468,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_engrelease">
                                 <span class="component-title">English torrents</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curTorrentProvider.getID()}_engrelease" id="${curTorrentProvider.getID()}_engrelease" ${('', 'checked="checked"')[bool(curTorrentProvider.engrelease)]} />
+                                    <input type="checkbox" name="${curTorrentProvider.getID()}_engrelease" id="${curTorrentProvider.getID()}_engrelease" ${('', 'checked="checked"')[bool(curTorrentProvider.engrelease)]}  autocapitalize="off" />
                                     <p>only download english torrents ,or torrents containing english subtitles</p>
                                 </span>
                             </label>
@@ -480,7 +480,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_onlyspasearch">
                                 <span class="component-title">For Spanish torrents</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curTorrentProvider.getID()}_onlyspasearch" id="${curTorrentProvider.getID()}_onlyspasearch" ${('', 'checked="checked"')[bool(curTorrentProvider.onlyspasearch)]} />
+                                    <input type="checkbox" name="${curTorrentProvider.getID()}_onlyspasearch" id="${curTorrentProvider.getID()}_onlyspasearch" ${('', 'checked="checked"')[bool(curTorrentProvider.onlyspasearch)]}  autocapitalize="off" />
                                     <p>ONLY search on this provider if show info is defined as "Spanish" (avoid provider's use for VOS shows)</p>
                                 </span>
                             </label>
@@ -507,7 +507,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_freeleech">
                                 <span class="component-title">Freeleech</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curTorrentProvider.getID()}_freeleech" id="${curTorrentProvider.getID()}_freeleech" ${('', 'checked="checked"')[bool(curTorrentProvider.freeleech)]}/>
+                                    <input type="checkbox" name="${curTorrentProvider.getID()}_freeleech" id="${curTorrentProvider.getID()}_freeleech" ${('', 'checked="checked"')[bool(curTorrentProvider.freeleech)]} autocapitalize="off" />
                                     <p>only download <b>[FreeLeech]</b> torrents.</p>
                                 </span>
                             </label>
@@ -519,7 +519,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_enable_daily">
                                 <span class="component-title">Enable daily searches</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curTorrentProvider.getID()}_enable_daily" id="${curTorrentProvider.getID()}_enable_daily" ${('', 'checked="checked"')[bool(curTorrentProvider.enable_daily)]}/>
+                                    <input type="checkbox" name="${curTorrentProvider.getID()}_enable_daily" id="${curTorrentProvider.getID()}_enable_daily" ${('', 'checked="checked"')[bool(curTorrentProvider.enable_daily)]} autocapitalize="off" />
                                     <p>enable provider to perform daily searches.</p>
                                 </span>
                             </label>
@@ -531,7 +531,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_enable_backlog">
                                 <span class="component-title">Enable backlog searches</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curTorrentProvider.getID()}_enable_backlog" id="${curTorrentProvider.getID()}_enable_backlog" ${('', 'checked="checked"')[bool(curTorrentProvider.enable_backlog and curTorrentProvider.supportsBacklog)]}/>
+                                    <input type="checkbox" name="${curTorrentProvider.getID()}_enable_backlog" id="${curTorrentProvider.getID()}_enable_backlog" ${('', 'checked="checked"')[bool(curTorrentProvider.enable_backlog and curTorrentProvider.supportsBacklog)]} autocapitalize="off" />
                                     <p>enable provider to perform backlog searches.</p>
                                 </span>
                             </label>
@@ -543,7 +543,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_search_fallback">
                                 <span class="component-title">Season search fallback</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curTorrentProvider.getID()}_search_fallback" id="${curTorrentProvider.getID()}_search_fallback" ${('', 'checked="checked"')[bool(curTorrentProvider.search_fallback)]}/>
+                                    <input type="checkbox" name="${curTorrentProvider.getID()}_search_fallback" id="${curTorrentProvider.getID()}_search_fallback" ${('', 'checked="checked"')[bool(curTorrentProvider.search_fallback)]} autocapitalize="off" />
                                     <p>when searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.</p>
                                 </span>
                             </label>
@@ -561,13 +561,13 @@ $('#config-components').tabs();
                             <label>
                                 <span class="component-title"></span>
                                 <span class="component-desc">
-                                    <input type="radio" name="${curTorrentProvider.getID()}_search_mode" id="${curTorrentProvider.getID()}_search_mode_sponly" value="sponly" ${('', 'checked="checked"')[curTorrentProvider.search_mode=="sponly"]}/>season packs only.
+                                    <input type="radio" name="${curTorrentProvider.getID()}_search_mode" id="${curTorrentProvider.getID()}_search_mode_sponly" value="sponly" ${('', 'checked="checked"')[curTorrentProvider.search_mode=="sponly"]} autocapitalize="off" />season packs only.
                                 </span>
                             </label>
                             <label>
                                 <span class="component-title"></span>
                                 <span class="component-desc">
-                                    <input type="radio" name="${curTorrentProvider.getID()}_search_mode" id="${curTorrentProvider.getID()}_search_mode_eponly" value="eponly" ${('', 'checked="checked"')[curTorrentProvider.search_mode=="eponly"]}/>episodes only.
+                                    <input type="radio" name="${curTorrentProvider.getID()}_search_mode" id="${curTorrentProvider.getID()}_search_mode_eponly" value="eponly" ${('', 'checked="checked"')[curTorrentProvider.search_mode=="eponly"]} autocapitalize="off" />episodes only.
                                 </span>
                             </label>
                         </div>
@@ -593,7 +593,7 @@ $('#config-components').tabs();
                             <label for="${curTorrentProvider.getID()}_subtitle">
                                 <span class="component-title">Subtitled</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="${curTorrentProvider.getID()}_subtitle" id="${curTorrentProvider.getID()}_subtitle" ${('', 'checked="checked"')[bool(curTorrentProvider.subtitle)]}/>
+                                    <input type="checkbox" name="${curTorrentProvider.getID()}_subtitle" id="${curTorrentProvider.getID()}_subtitle" ${('', 'checked="checked"')[bool(curTorrentProvider.subtitle)]} autocapitalize="off" />
                                     <p>select torrent with Italian subtitle</p>
                                 </span>
                             </label>
@@ -606,7 +606,7 @@ $('#config-components').tabs();
 
                     <!-- end div for editing providers -->
 
-                    <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                    <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
 
                     </fieldset>
                 </div><!-- /component-group2 //-->
@@ -624,7 +624,7 @@ $('#config-components').tabs();
                             <label for="newznab_string">
                                 <span class="component-title">Select provider:</span>
                                 <span class="component-desc">
-                                    <input type="hidden" name="newznab_string" id="newznab_string" />
+                                    <input type="hidden" name="newznab_string" id="newznab_string"  autocapitalize="off" />
                                     <select id="editANewznabProvider" class="form-control input-sm">
                                         <option value="addNewznab">-- add new provider --</option>
                                     </select>
@@ -636,19 +636,19 @@ $('#config-components').tabs();
                         <div class="field-pair">
                             <label for="newznab_name">
                                 <span class="component-title">Provider name:</span>
-                                <input type="text" id="newznab_name" class="form-control input-sm input200" />
+                                <input type="text" id="newznab_name" class="form-control input-sm input200"  autocapitalize="off" />
                             </label>
                         </div>
                         <div class="field-pair">
                             <label for="newznab_url">
                                 <span class="component-title">Site URL:</span>
-                                <input type="text" id="newznab_url" class="form-control input-sm input350" />
+                                <input type="text" id="newznab_url" class="form-control input-sm input350"  autocapitalize="off" />
                             </label>
                         </div>
                         <div class="field-pair">
                             <label for="newznab_key">
                                 <span class="component-title">API key:</span>
-                                <input type="text" id="newznab_key" class="form-control input-sm input350" />
+                                <input type="text" id="newznab_key" class="form-control input-sm input350"  autocapitalize="off" />
                             </label>
                             <label>
                                 <span class="component-title">&nbsp;</span>
@@ -668,17 +668,17 @@ $('#config-components').tabs();
                             </label>
                             <label>
                                 <span class="component-title">&nbsp;</span>
-                                <span class="component-desc"><input class="btn" type="button" class="newznab_cat_update" id="newznab_cat_update" value="Update Categories" />
+                                <span class="component-desc"><input class="btn" type="button" class="newznab_cat_update" id="newznab_cat_update" value="Update Categories"  autocapitalize="off" />
                                     <span class="updating_categories"></span>
                                 </span>
                             </label>
                         </div>
 
                         <div id="newznab_add_div">
-                            <input class="btn" type="button" class="newznab_save" id="newznab_add" value="Add" />
+                            <input class="btn" type="button" class="newznab_save" id="newznab_add" value="Add"  autocapitalize="off" />
                         </div>
                         <div id="newznab_update_div" style="display: none;">
-                            <input class="btn btn-danger newznab_delete" type="button" class="newznab_delete" id="newznab_delete" value="Delete" />
+                            <input class="btn btn-danger newznab_delete" type="button" class="newznab_delete" id="newznab_delete" value="Delete"  autocapitalize="off" />
                         </div>
                     </div>
 
@@ -700,7 +700,7 @@ $('#config-components').tabs();
                         <label for="torrentrss_string">
                             <span class="component-title">Select provider:</span>
                             <span class="component-desc">
-                            <input type="hidden" name="torrentrss_string" id="torrentrss_string" />
+                            <input type="hidden" name="torrentrss_string" id="torrentrss_string"  autocapitalize="off" />
                                 <select id="editATorrentRssProvider" class="form-control input-sm">
                                     <option value="addTorrentRss">-- add new provider --</option>
                                 </select>
@@ -712,19 +712,19 @@ $('#config-components').tabs();
                         <div class="field-pair">
                             <label for="torrentrss_name">
                                 <span class="component-title">Provider name:</span>
-                                <input type="text" id="torrentrss_name" class="form-control input-sm input200" />
+                                <input type="text" id="torrentrss_name" class="form-control input-sm input200"  autocapitalize="off" />
                             </label>
                         </div>
                         <div class="field-pair">
                             <label for="torrentrss_url">
                                 <span class="component-title">RSS URL:</span>
-                                <input type="text" id="torrentrss_url" class="form-control input-sm input350" />
+                                <input type="text" id="torrentrss_url" class="form-control input-sm input350"  autocapitalize="off" />
                             </label>
                         </div>
                         <div class="field-pair">
                             <label for="torrentrss_cookies">
                                 <span class="component-title">Cookies:</span>
-                                <input type="text" id="torrentrss_cookies" class="form-control input-sm input350" />
+                                <input type="text" id="torrentrss_cookies" class="form-control input-sm input350"  autocapitalize="off" />
                             </label>
                             <label>
                                 <span class="component-title">&nbsp;</span>
@@ -734,7 +734,7 @@ $('#config-components').tabs();
                         <div class="field-pair">
                             <label for="torrentrss_titleTAG">
                                 <span class="component-title">Search element:</span>
-                                <input type="text" id="torrentrss_titleTAG" class="form-control input-sm input200" value="title"/>
+                                <input type="text" id="torrentrss_titleTAG" class="form-control input-sm input200" value="title" autocapitalize="off" />
                             </label>
                             <label>
                                 <span class="component-title">&nbsp;</span>
@@ -742,17 +742,17 @@ $('#config-components').tabs();
                             </label>
                         </div>
                         <div id="torrentrss_add_div">
-                            <input type="button" class="btn torrentrss_save" id="torrentrss_add" value="Add" />
+                            <input type="button" class="btn torrentrss_save" id="torrentrss_add" value="Add"  autocapitalize="off" />
                         </div>
                         <div id="torrentrss_update_div" style="display: none;">
-                            <input type="button" class="btn btn-danger torrentrss_delete" id="torrentrss_delete" value="Delete" />
+                            <input type="button" class="btn btn-danger torrentrss_delete" id="torrentrss_delete" value="Delete"  autocapitalize="off" />
                         </div>
                     </div>
                 </fieldset>
             </div><!-- /component-group4 //-->
             % endif
 
-            <br><input type="submit" class="btn config_submitter_refresh" value="Save Changes" /><br>
+            <br><input type="submit" class="btn config_submitter_refresh" value="Save Changes"  autocapitalize="off" /><br>
 
             </div><!-- /config-components //-->
 
diff --git a/gui/slick/views/config_search.mako b/gui/slick/views/config_search.mako
index 61e3054dfd68e15001d3933a3efe8f28235f4c52..cb14c318521fb166e840b43b5f299ce21b69cf9e 100644
--- a/gui/slick/views/config_search.mako
+++ b/gui/slick/views/config_search.mako
@@ -31,7 +31,7 @@
                             <label for="randomize_providers">
                                 <span class="component-title">Randomize Providers</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="randomize_providers" id="randomize_providers" class="enabler" ${('', 'checked="checked"')[bool(sickbeard.RANDOMIZE_PROVIDERS)]}/>
+                                    <input type="checkbox" name="randomize_providers" id="randomize_providers" class="enabler" ${('', 'checked="checked"')[bool(sickbeard.RANDOMIZE_PROVIDERS)]} autocapitalize="off" />
                                     <p>randomize the provider search order instead of going in order of placement</p>
                                 </span>
                             </label>
@@ -40,7 +40,7 @@
                             <label for="download_propers">
                                 <span class="component-title">Download propers</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="download_propers" id="download_propers" class="enabler" ${('', 'checked="checked"')[bool(sickbeard.DOWNLOAD_PROPERS)]}/>
+                                    <input type="checkbox" name="download_propers" id="download_propers" class="enabler" ${('', 'checked="checked"')[bool(sickbeard.DOWNLOAD_PROPERS)]} autocapitalize="off" />
                                     <p>replace original download with "Proper" or "Repack" if nuked</p>
                                 </span>
                             </label>
@@ -65,7 +65,7 @@
                             <label>
                                 <span class="component-title">Backlog search day(s)</span>
                                 <span class="component-desc">
-                                    <input type="text" name="backlog_days" value="${sickbeard.BACKLOG_DAYS}" class="form-control input-sm input75" />
+                                    <input type="text" name="backlog_days" value="${sickbeard.BACKLOG_DAYS}" class="form-control input-sm input75"  autocapitalize="off" />
                                     <p>number of day(s) that the "Forced Backlog Search" will cover (e.g. 7 Days)</p>
                                 </span>
                             </label>
@@ -75,7 +75,7 @@
                             <label>
                                 <span class="component-title">Backlog search frequency</span>
                                 <span class="component-desc">
-                                    <input type="text" name="backlog_frequency" value="${sickbeard.BACKLOG_FREQUENCY}" class="form-control input-sm input75" />
+                                    <input type="text" name="backlog_frequency" value="${sickbeard.BACKLOG_FREQUENCY}" class="form-control input-sm input75"  autocapitalize="off" />
                                     <p>time in minutes between searches (min. ${sickbeard.MIN_BACKLOG_FREQUENCY})</p>
                                 </span>
                             </label>
@@ -85,7 +85,7 @@
                             <label>
                                 <span class="component-title">Daily search frequency</span>
                                 <span class="component-desc">
-                                    <input type="text" name="dailysearch_frequency" value="${sickbeard.DAILYSEARCH_FREQUENCY}" class="form-control input-sm input75" />
+                                    <input type="text" name="dailysearch_frequency" value="${sickbeard.DAILYSEARCH_FREQUENCY}" class="form-control input-sm input75"  autocapitalize="off" />
                                     <p>time in minutes between searches (min. ${sickbeard.MIN_DAILYSEARCH_FREQUENCY})</p>
                                     </span>
                             </label>
@@ -95,7 +95,7 @@
                             <label>
                                 <span class="component-title">Usenet retention</span>
                                 <span class="component-desc">
-                                    <input type="text" name="usenet_retention" value="${sickbeard.USENET_RETENTION}" class="form-control input-sm input75" />
+                                    <input type="text" name="usenet_retention" value="${sickbeard.USENET_RETENTION}" class="form-control input-sm input75"  autocapitalize="off" />
                                     <p>age limit in days for usenet articles to be used (e.g. 500)</p>
                                 </span>
                             </label>
@@ -105,7 +105,7 @@
                             <label>
                                 <span class="component-title">Ignore words</span>
                                 <span class="component-desc">
-                                    <input type="text" name="ignore_words" value="${sickbeard.IGNORE_WORDS}" class="form-control input-sm input350" />
+                                    <input type="text" name="ignore_words" value="${sickbeard.IGNORE_WORDS}" class="form-control input-sm input350"  autocapitalize="off" />
                                     <div class="clear-left">results with one or more word from this list will be ignored<br>
                                     separate words with a comma, e.g. "word1,word2,word3"
                                     </div>
@@ -117,7 +117,7 @@
                             <label>
                                 <span class="component-title">Require words</span>
                                 <span class="component-desc">
-                                    <input type="text" name="require_words" value="${sickbeard.REQUIRE_WORDS}" class="form-control input-sm input350" />
+                                    <input type="text" name="require_words" value="${sickbeard.REQUIRE_WORDS}" class="form-control input-sm input350"  autocapitalize="off" />
                                     <div class="clear-left">results with no word from this list will be ignored<br>
                                     separate words with a comma, e.g. "word1,word2,word3"
                                     </div>
@@ -129,7 +129,7 @@
                             <label>
                                 <span class="component-title">Trackers list</span>
                                 <span class="component-desc">
-                                    <input type="text" name="trackers_list" value="${sickbeard.TRACKERS_LIST}" class="form-control input-sm input350" />
+                                    <input type="text" name="trackers_list" value="${sickbeard.TRACKERS_LIST}" class="form-control input-sm input350"  autocapitalize="off" />
                                     <div class="clear-left">Trackers that will be added to magnets without trackers<br>
                                     separate trackers with a comma, e.g. "tracker1,tracker2,tracker3"
                                     </div>
@@ -141,7 +141,7 @@
                             <label>
                                 <span class="component-title">Ignore language names in subbed results</span>
                                 <span class="component-desc">
-                                    <input type="text" name="ignored_subs_list" value="${sickbeard.IGNORED_SUBS_LIST}" class="form-control input-sm input350" />
+                                    <input type="text" name="ignored_subs_list" value="${sickbeard.IGNORED_SUBS_LIST}" class="form-control input-sm input350"  autocapitalize="off" />
                                     <div class="clear-left">Ignore subbed releases based on language names <br>
                                     Example: "dk" will ignore words: dksub, dksubs, dksubbed, dksubed <br>
                                     separate languages with a comma, e.g. "lang1,lang2,lang3
@@ -154,14 +154,14 @@
                             <label for="allow_high_priority">
                                 <span class="component-title">Allow high priority</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="allow_high_priority" id="allow_high_priority" ${('', 'checked="checked"')[bool(sickbeard.ALLOW_HIGH_PRIORITY)]}/>
+                                    <input type="checkbox" name="allow_high_priority" id="allow_high_priority" ${('', 'checked="checked"')[bool(sickbeard.ALLOW_HIGH_PRIORITY)]} autocapitalize="off" />
                                     <p>set downloads of recently aired episodes to high priority</p>
                                 </span>
                             </label>
                         </div>
 
                          <div class="field-pair">
-                             <input id="use_failed_downloads" type="checkbox" class="enabler" name="use_failed_downloads" ${('', 'checked="checked"')[bool(sickbeard.USE_FAILED_DOWNLOADS)]} />
+                             <input id="use_failed_downloads" type="checkbox" class="enabler" name="use_failed_downloads" ${('', 'checked="checked"')[bool(sickbeard.USE_FAILED_DOWNLOADS)]}  autocapitalize="off" />
                              <label for="use_failed_downloads">
                                  <span class="component-title">Use Failed Downloads</span>
                                  <span class="component-desc">Use Failed Download Handling?</span>
@@ -174,7 +174,7 @@
 
                         <div id="content_use_failed_downloads">
                             <div class="field-pair">
-                                <input id="delete_failed" type="checkbox" name="delete_failed" ${('', 'checked="checked"')[bool(sickbeard.DELETE_FAILED)]}/>
+                                <input id="delete_failed" type="checkbox" name="delete_failed" ${('', 'checked="checked"')[bool(sickbeard.DELETE_FAILED)]} autocapitalize="off" />
                                 <label for="delete_failed">
                                     <span class="component-title">Delete Failed</span>
                                     <span class="component-desc">Delete files left over from a failed download?</span>
@@ -186,7 +186,7 @@
                             </div>
                         </div>
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" />
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" />
 
                     </fieldset>
                 </div><!-- /component-group1 //-->
@@ -204,7 +204,7 @@
                             <label for="use_nzbs">
                                 <span class="component-title">Search NZBs</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="use_nzbs" class="enabler" id="use_nzbs" ${('', 'checked="checked"')[bool(sickbeard.USE_NZBS)]}/>
+                                    <input type="checkbox" name="use_nzbs" class="enabler" id="use_nzbs" ${('', 'checked="checked"')[bool(sickbeard.USE_NZBS)]} autocapitalize="off" />
                                     <p>enable NZB search providers</p></span>
                             </label>
                         </div>
@@ -229,7 +229,7 @@
                                 <label>
                                     <span class="component-title">Black hole folder location</span>
                                     <span class="component-desc">
-                                        <input type="text" name="nzb_dir" id="nzb_dir" value="${sickbeard.NZB_DIR}" class="form-control input-sm input350" />
+                                        <input type="text" name="nzb_dir" id="nzb_dir" value="${sickbeard.NZB_DIR}" class="form-control input-sm input350"  autocapitalize="off" />
                                         <div class="clear-left"><p><b>.nzb</b> files are stored at this location for external software to find and use</p></div>
                                     </span>
                                 </label>
@@ -241,7 +241,7 @@
                                 <label>
                                     <span class="component-title">SABnzbd server URL</span>
                                     <span class="component-desc">
-                                        <input type="text" id="sab_host" name="sab_host" value="${sickbeard.SAB_HOST}" class="form-control input-sm input350" />
+                                        <input type="text" id="sab_host" name="sab_host" value="${sickbeard.SAB_HOST}" class="form-control input-sm input350"  autocapitalize="off" />
                                         <div class="clear-left"><p>URL to your SABnzbd server (e.g. http://localhost:8080/)</p></div>
                                     </span>
                                 </label>
@@ -251,7 +251,7 @@
                                 <label>
                                     <span class="component-title">SABnzbd username</span>
                                     <span class="component-desc">
-                                        <input type="text" name="sab_username" id="sab_username" value="${sickbeard.SAB_USERNAME}" class="form-control input-sm input200" />
+                                        <input type="text" name="sab_username" id="sab_username" value="${sickbeard.SAB_USERNAME}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>(blank for none)</p>
                                     </span>
                                 </label>
@@ -261,7 +261,7 @@
                                 <label>
                                     <span class="component-title">SABnzbd password</span>
                                     <span class="component-desc">
-                                        <input type="password" name="sab_password" id="sab_password" value="${sickbeard.SAB_PASSWORD}" class="form-control input-sm input200" />
+                                        <input type="password" name="sab_password" id="sab_password" value="${sickbeard.SAB_PASSWORD}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>(blank for none)</p>
                                     </span>
                                 </label>
@@ -271,7 +271,7 @@
                                 <label>
                                     <span class="component-title">SABnzbd API key</span>
                                     <span class="component-desc">
-                                        <input type="text" name="sab_apikey" id="sab_apikey" value="${sickbeard.SAB_APIKEY}" class="form-control input-sm input350" />
+                                        <input type="text" name="sab_apikey" id="sab_apikey" value="${sickbeard.SAB_APIKEY}" class="form-control input-sm input350"  autocapitalize="off" />
                                         <div class="clear-left"><p>locate at... SABnzbd Config -> General -> API Key</p></div>
                                     </span>
                                 </label>
@@ -281,7 +281,7 @@
                                 <label>
                                     <span class="component-title">Use SABnzbd category</span>
                                     <span class="component-desc">
-                                        <input type="text" name="sab_category" id="sab_category" value="${sickbeard.SAB_CATEGORY}" class="form-control input-sm input200" />
+                                        <input type="text" name="sab_category" id="sab_category" value="${sickbeard.SAB_CATEGORY}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>add downloads to this category (e.g. TV)</p>
                                     </span>
                                 </label>
@@ -291,7 +291,7 @@
                                 <label>
                                     <span class="component-title">Use SABnzbd category (backlog episodes)</span>
                                     <span class="component-desc">
-                                        <input type="text" name="sab_category_backlog" id="sab_category_backlog" value="${sickbeard.SAB_CATEGORY_BACKLOG}" class="form-control input-sm input200" />
+                                        <input type="text" name="sab_category_backlog" id="sab_category_backlog" value="${sickbeard.SAB_CATEGORY_BACKLOG}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>add downloads of old episodes to this category (e.g. TV)</p>
                                     </span>
                                 </label>
@@ -301,7 +301,7 @@
                                 <label>
                                     <span class="component-title">Use SABnzbd category for anime</span>
                                     <span class="component-desc">
-                                        <input type="text" name="sab_category_anime" id="sab_category_anime" value="${sickbeard.SAB_CATEGORY_ANIME}" class="form-control input-sm input200" />
+                                        <input type="text" name="sab_category_anime" id="sab_category_anime" value="${sickbeard.SAB_CATEGORY_ANIME}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>add anime downloads to this category (e.g. anime)</p>
                                     </span>
                                 </label>
@@ -312,7 +312,7 @@
                                 <label>
                                     <span class="component-title">Use SABnzbd category for anime (backlog episodes)</span>
                                     <span class="component-desc">
-                                        <input type="text" name="sab_category_anime_backlog" id="sab_category_anime_backlog" value="${sickbeard.SAB_CATEGORY_ANIME_BACKLOG}" class="form-control input-sm input200" />
+                                        <input type="text" name="sab_category_anime_backlog" id="sab_category_anime_backlog" value="${sickbeard.SAB_CATEGORY_ANIME_BACKLOG}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>add anime downloads of old episodes to this category (e.g. anime)</p>
                                     </span>
                                 </label>
@@ -323,7 +323,7 @@
                                 <label for="sab_forced">
                                     <span class="component-title">Use forced priority</span>
                                     <span class="component-desc">
-                                        <input type="checkbox" name="sab_forced" class="enabler" id="sab_forced" ${('', 'selected="selected"')[bool(sickbeard.SAB_FORCED)]}/>
+                                        <input type="checkbox" name="sab_forced" class="enabler" id="sab_forced" ${('', 'selected="selected"')[bool(sickbeard.SAB_FORCED)]} autocapitalize="off" />
                                         <p>enable to change priority from HIGH to FORCED</p></span>
                                 </label>
                             </div>
@@ -335,7 +335,7 @@
                                 <label for="nzbget_use_https">
                                     <span class="component-title">Connect using HTTPS</span>
                                     <span class="component-desc">
-                                        <input id="nzbget_use_https" type="checkbox" class="enabler" name="nzbget_use_https" ${('', 'selected="selected"')[bool(sickbeard.NZBGET_USE_HTTPS)]}/>
+                                        <input id="nzbget_use_https" type="checkbox" class="enabler" name="nzbget_use_https" ${('', 'selected="selected"')[bool(sickbeard.NZBGET_USE_HTTPS)]} autocapitalize="off" />
                                         <p><b>note:</b> enable Secure control in NZBGet and set the correct Secure Port here</p>
                                     </span>
                                 </label>
@@ -346,7 +346,7 @@
                                 <label>
                                     <span class="component-title">NZBget host:port</span>
                                     <span class="component-desc">
-                                        <input type="text" name="nzbget_host" id="nzbget_host" value="${sickbeard.NZBGET_HOST}" class="form-control input-sm input350" />
+                                        <input type="text" name="nzbget_host" id="nzbget_host" value="${sickbeard.NZBGET_HOST}" class="form-control input-sm input350"  autocapitalize="off" />
                                         <p>(e.g. localhost:6789)</p>
                                         <div class="clear-left"><p>NZBget RPC host name and port number (not NZBgetweb!)</p></div>
                                     </span>
@@ -357,7 +357,7 @@
                                 <label>
                                     <span class="component-title">NZBget username</span>
                                     <span class="component-desc">
-                                        <input type="text" name="nzbget_username" value="${sickbeard.NZBGET_USERNAME}" class="form-control input-sm input200" />
+                                        <input type="text" name="nzbget_username" value="${sickbeard.NZBGET_USERNAME}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>locate in nzbget.conf (default:nzbget)</p>
                                     </span>
                                 </label>
@@ -367,7 +367,7 @@
                                 <label>
                                     <span class="component-title">NZBget password</span>
                                     <span class="component-desc">
-                                        <input type="password" name="nzbget_password" id="nzbget_password" value="${sickbeard.NZBGET_PASSWORD}" class="form-control input-sm input200" />
+                                        <input type="password" name="nzbget_password" id="nzbget_password" value="${sickbeard.NZBGET_PASSWORD}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>locate in nzbget.conf (default:tegbzn6789)</p>
                                     </span>
                                 </label>
@@ -377,7 +377,7 @@
                                 <label>
                                     <span class="component-title">Use NZBget category</span>
                                     <span class="component-desc">
-                                        <input type="text" name="nzbget_category" id="nzbget_category" value="${sickbeard.NZBGET_CATEGORY}" class="form-control input-sm input200" />
+                                        <input type="text" name="nzbget_category" id="nzbget_category" value="${sickbeard.NZBGET_CATEGORY}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>send downloads marked this category (e.g. TV)</p>
                                     </span>
                                 </label>
@@ -387,7 +387,7 @@
                                 <label>
                                     <span class="component-title">Use NZBget category (backlog episodes)</span>
                                     <span class="component-desc">
-                                        <input type="text" name="nzbget_category_backlog" id="nzbget_category_backlog" value="${sickbeard.NZBGET_CATEGORY_BACKLOG}" class="form-control input-sm input200" />
+                                        <input type="text" name="nzbget_category_backlog" id="nzbget_category_backlog" value="${sickbeard.NZBGET_CATEGORY_BACKLOG}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>send downloads of old episodes marked this category (e.g. TV)</p>
                                     </span>
                                 </label>
@@ -397,7 +397,7 @@
                                 <label>
                                     <span class="component-title">Use NZBget category for anime</span>
                                     <span class="component-desc">
-                                        <input type="text" name="nzbget_category_anime" id="nzbget_category_anime" value="${sickbeard.NZBGET_CATEGORY_ANIME}" class="form-control input-sm input200" />
+                                        <input type="text" name="nzbget_category_anime" id="nzbget_category_anime" value="${sickbeard.NZBGET_CATEGORY_ANIME}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>send anime downloads marked this category (e.g. anime)</p>
                                     </span>
                                 </label>
@@ -407,7 +407,7 @@
                                 <label>
                                     <span class="component-title">Use NZBget category for anime (backlog episodes)</span>
                                     <span class="component-desc">
-                                        <input type="text" name="nzbget_category_anime_backlog" id="nzbget_category_anime_backlog" value="${sickbeard.NZBGET_CATEGORY_ANIME_BACKLOG}" class="form-control input-sm input200" />
+                                        <input type="text" name="nzbget_category_anime_backlog" id="nzbget_category_anime_backlog" value="${sickbeard.NZBGET_CATEGORY_ANIME_BACKLOG}" class="form-control input-sm input200"  autocapitalize="off" />
                                         <p>send anime downloads of old episodes marked this category (e.g. anime)</p>
                                     </span>
                                 </label>
@@ -432,8 +432,8 @@
                         </div>
 
                         <div class="testNotification" id="testSABnzbd_result">Click below to test</div>
-                        <input class="btn" type="button" value="Test SABnzbd" id="testSABnzbd" class="btn test-button"/>
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                        <input class="btn" type="button" value="Test SABnzbd" id="testSABnzbd" class="btn test-button" autocapitalize="off" />
+                        <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
 
                         </div><!-- /content_use_nzbs //-->
 
@@ -451,7 +451,7 @@
                             <label for="use_torrents">
                                 <span class="component-title">Search torrents</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" name="use_torrents" class="enabler" id="use_torrents" ${('', 'checked="checked"')[bool(sickbeard.USE_TORRENTS)]}/>
+                                    <input type="checkbox" name="use_torrents" class="enabler" id="use_torrents" ${('', 'checked="checked"')[bool(sickbeard.USE_TORRENTS)]} autocapitalize="off" />
                                     <p>enable torrent search providers</p>
                                 </span>
                             </label>
@@ -475,14 +475,14 @@
                                         <label>
                                             <span class="component-title">Black hole folder location</span>
                                             <span class="component-desc">
-                                                <input type="text" name="torrent_dir" id="torrent_dir" value="${sickbeard.TORRENT_DIR}" class="form-control input-sm input350" />
+                                                <input type="text" name="torrent_dir" id="torrent_dir" value="${sickbeard.TORRENT_DIR}" class="form-control input-sm input350"  autocapitalize="off" />
                                                 <div class="clear-left"><p><b>.torrent</b> files are stored at this location for external software to find and use</p></div>
                                             </span>
                                         </label>
                                     </div>
 
                                     <div></div>
-                                    <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                                    <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
                                 </div>
                             </div>
 
@@ -491,7 +491,7 @@
                                     <label>
                                         <span class="component-title" id="host_title">Torrent host:port</span>
                                         <span class="component-desc">
-                                            <input type="text" name="torrent_host" id="torrent_host" value="${sickbeard.TORRENT_HOST}" class="form-control input-sm input350" />
+                                            <input type="text" name="torrent_host" id="torrent_host" value="${sickbeard.TORRENT_HOST}" class="form-control input-sm input350"  autocapitalize="off" />
                                             <div class="clear-left">
                                                 <p id="host_desc_torrent">URL to your torrent client (e.g. http://localhost:8000/)</p>
                                             </div>
@@ -503,7 +503,7 @@
                                     <label>
                                         <span class="component-title" id="rpcurl_title">Torrent RPC URL</span>
                                         <span class="component-desc">
-                                            <input type="text" name="torrent_rpcurl" id="torrent_rpcurl" value="${sickbeard.TORRENT_RPCURL}" class="form-control input-sm input350"/>
+                                            <input type="text" name="torrent_rpcurl" id="torrent_rpcurl" value="${sickbeard.TORRENT_RPCURL}" class="form-control input-sm input350" autocapitalize="off" />
                                             <div class="clear-left">
                                                 <p id="rpcurl_desc_">The path without leading and trailing slashes (e.g. transmission)</p>
                                             </div>
@@ -530,7 +530,7 @@
                                     <label for="torrent_verify_cert">
                                         <span class="component-title">Verify certificate</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="torrent_verify_cert" class="enabler" id="torrent_verify_cert" ${('', 'checked="checked"')[bool(sickbeard.TORRENT_VERIFY_CERT)]}/>
+                                            <input type="checkbox" name="torrent_verify_cert" class="enabler" id="torrent_verify_cert" ${('', 'checked="checked"')[bool(sickbeard.TORRENT_VERIFY_CERT)]} autocapitalize="off" />
                                             <p id="torrent_verify_deluge">disable if you get "Deluge: Authentication Error" in your log</p>
                                             <p id="torrent_verify_rtorrent">Verify SSL certificates for HTTPS requests</p>
                                         </span>
@@ -541,7 +541,7 @@
                                     <label>
                                         <span class="component-title" id="username_title">Client username</span>
                                         <span class="component-desc">
-                                            <input type="text" name="torrent_username" id="torrent_username" value="${sickbeard.TORRENT_USERNAME}" class="form-control input-sm input200" />
+                                            <input type="text" name="torrent_username" id="torrent_username" value="${sickbeard.TORRENT_USERNAME}" class="form-control input-sm input200"  autocapitalize="off" />
                                             <p>(blank for none)</p>
                                         </span>
                                     </label>
@@ -551,7 +551,7 @@
                                     <label>
                                         <span class="component-title" id="password_title">Client password</span>
                                         <span class="component-desc">
-                                            <input type="password" name="torrent_password" id="torrent_password" value="${sickbeard.TORRENT_PASSWORD}" class="form-control input-sm input200" />
+                                            <input type="password" name="torrent_password" id="torrent_password" value="${sickbeard.TORRENT_PASSWORD}" class="form-control input-sm input200"  autocapitalize="off" />
                                             <p>(blank for none)</p>
                                         </span>
                                     </label>
@@ -561,7 +561,7 @@
                                     <label>
                                         <span class="component-title">Add label to torrent</span>
                                         <span class="component-desc">
-                                            <input type="text" name="torrent_label" id="torrent_label" value="${sickbeard.TORRENT_LABEL}" class="form-control input-sm input200" />
+                                            <input type="text" name="torrent_label" id="torrent_label" value="${sickbeard.TORRENT_LABEL}" class="form-control input-sm input200"  autocapitalize="off" />
                                             <span id="label_warning_deluge" style="display:none"><p>(blank spaces are not allowed)</p>
                                                 <div class="clear-left"><p>note: label plugin must be enabled in Deluge clients</p></div>
                                             </span>
@@ -573,7 +573,7 @@
                                     <label>
                                         <span class="component-title">Add label to torrent for anime</span>
                                         <span class="component-desc">
-                                            <input type="text" name="torrent_label_anime" id="torrent_label_anime" value="${sickbeard.TORRENT_LABEL_ANIME}" class="form-control input-sm input200" />
+                                            <input type="text" name="torrent_label_anime" id="torrent_label_anime" value="${sickbeard.TORRENT_LABEL_ANIME}" class="form-control input-sm input200"  autocapitalize="off" />
                                             <span id="label_anime_warning_deluge" style="display:none"><p>(blank spaces are not allowed)</p>
                                                 <div class="clear-left"><p>note: label plugin must be enabled in Deluge clients</p></div>
                                             </span>
@@ -585,7 +585,7 @@
                                     <label>
                                         <span class="component-title" id="directory_title">Downloaded files location</span>
                                         <span class="component-desc">
-                                            <input type="text" name="torrent_path" id="torrent_path" value="${sickbeard.TORRENT_PATH}" class="form-control input-sm input350" />
+                                            <input type="text" name="torrent_path" id="torrent_path" value="${sickbeard.TORRENT_PATH}" class="form-control input-sm input350"  autocapitalize="off" />
                                             <div class="clear-left"><p>where <span id="torrent_client">the torrent client</span> will save downloaded files (blank for client default)
                                                 <span id="path_synology"> <b>note:</b> the destination has to be a shared folder for Synology DS</span></p>
                                             </div>
@@ -596,7 +596,7 @@
                                 <div class="field-pair" id="torrent_seed_time_option">
                                     <label>
                                         <span class="component-title" id="torrent_seed_time_label">Minimum seeding time is</span>
-                                        <span class="component-desc"><input type="number" step="1" name="torrent_seed_time" id="torrent_seed_time" value="${sickbeard.TORRENT_SEED_TIME}" class="form-control input-sm input100" />
+                                        <span class="component-desc"><input type="number" step="1" name="torrent_seed_time" id="torrent_seed_time" value="${sickbeard.TORRENT_SEED_TIME}" class="form-control input-sm input100"  autocapitalize="off" />
                                         <p>hours. (default:'0' passes blank to client and '-1' passes nothing)</p></span>
                                     </label>
                                 </div>
@@ -605,7 +605,7 @@
                                     <label>
                                         <span class="component-title">Start torrent paused</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="torrent_paused" class="enabler" id="torrent_paused" ${('', 'checked="checked"')[bool(sickbeard.TORRENT_PAUSED)]}/>
+                                            <input type="checkbox" name="torrent_paused" class="enabler" id="torrent_paused" ${('', 'checked="checked"')[bool(sickbeard.TORRENT_PAUSED)]} autocapitalize="off" />
                                             <p>add .torrent to client but do <b style="font-weight:900">not</b> start downloading</p>
                                         </span>
                                     </label>
@@ -615,15 +615,15 @@
                                     <label>
                                         <span class="component-title">Allow high bandwidth</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="torrent_high_bandwidth" class="enabler" id="torrent_high_bandwidth" ${('', 'checked="checked"')[bool(sickbeard.TORRENT_HIGH_BANDWIDTH)]}/>
+                                            <input type="checkbox" name="torrent_high_bandwidth" class="enabler" id="torrent_high_bandwidth" ${('', 'checked="checked"')[bool(sickbeard.TORRENT_HIGH_BANDWIDTH)]} autocapitalize="off" />
                                             <p>use high bandwidth allocation if priority is high</p>
                                         </span>
                                     </label>
                                 </div>
 
                                 <div class="testNotification" id="test_torrent_result">Click below to test</div>
-                                <input class="btn" type="button" value="Test Connection" id="test_torrent" class="btn test-button"/>
-                                <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                                <input class="btn" type="button" value="Test Connection" id="test_torrent" class="btn test-button" autocapitalize="off" />
+                                <input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
                                 </div>
                         </div><!-- /content_use_torrents //-->
                     </fieldset>
@@ -631,7 +631,7 @@
 
                 <br>
                 <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6>
-                <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
+                <input type="submit" class="btn pull-left config_submitter button" value="Save Changes"  autocapitalize="off" />
 
             </div><!-- /config-components //-->
         </form>
diff --git a/gui/slick/views/config_subtitles.mako b/gui/slick/views/config_subtitles.mako
index b84bfc6b946110f26ffeba8f490f54a0acbe3bd1..72500662b80cf67160fcfd3ffc215a5ee7bd8838 100644
--- a/gui/slick/views/config_subtitles.mako
+++ b/gui/slick/views/config_subtitles.mako
@@ -11,7 +11,9 @@ $(document).ready(function() {
         method: "POST",
         hintText: "Write to search a language and select it",
         preventDuplicates: true,
-        prePopulate: [${','.join("{\"id\": \"" + subtitles.fromietf(lang).opensubtitles + "\", name: \"" + subtitles.fromietf(lang).name + "\"}" for lang in subtitles.wantedLanguages()) if subtitles.wantedLanguages() else ''}]
+        prePopulate: [${','.join("{\"id\": \"" + subtitles.fromietf(lang).opensubtitles + "\", name: \"" + subtitles.fromietf(lang).name + "\"}" for lang in subtitles.wantedLanguages()) if subtitles.wantedLanguages() else ''}],
+        resultsFormatter: function(item){ return "<li><img src='${srRoot}/images/subtitles/flags/" + item.id + ".png' /> " + item.name + "</li>" },
+        tokenFormatter: function(item)  { return "<li><img src='${srRoot}/images/subtitles/flags/" + item.id + ".png' /> " + item.name + "</li>" },
     });
 });
 $('#config-components').tabs();
@@ -57,7 +59,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                 <div class="field-pair">
                                     <label>
                                         <span class="component-title">Subtitle Languages</span>
-                                        <span class="component-desc"><input type="text" id="subtitles_languages" name="subtitles_languages" /></span>
+                                        <span class="component-desc"><input type="text" id="subtitles_languages" name="subtitles_languages"  autocapitalize="off" /></span>
                                     </label>
                                 </div>
                                 <div class="field-pair">
@@ -77,7 +79,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                 <div class="field-pair">
                                     <label>
                                         <span class="component-title">Subtitle Find Frequency</span>
-                                        <input type="number" name="subtitles_finder_frequency" value="${sickbeard.SUBTITLES_FINDER_FREQUENCY}" hours="1" class="form-control input-sm input75" />
+                                        <input type="number" name="subtitles_finder_frequency" value="${sickbeard.SUBTITLES_FINDER_FREQUENCY}" hours="1" class="form-control input-sm input75"  autocapitalize="off" />
                                         <span class="component-desc">time in hours between scans (default: 1)</span>
                                     </label>
                                 </div>
@@ -85,7 +87,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                     <label class="clearfix" for="subtitles_history">
                                         <span class="component-title">Subtitles History</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="subtitles_history" id="subtitles_history" ${('', 'checked="checked"')[bool(sickbeard.SUBTITLES_HISTORY)]}/>
+                                            <input type="checkbox" name="subtitles_history" id="subtitles_history" ${('', 'checked="checked"')[bool(sickbeard.SUBTITLES_HISTORY)]} autocapitalize="off" />
                                             <p>Log downloaded Subtitle on History page?</p>
                                         </span>
                                     </label>
@@ -94,16 +96,27 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                     <label class="clearfix" for="subtitles_multi">
                                         <span class="component-title">Subtitles Multi-Language</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="subtitles_multi" id="subtitles_multi" ${('', 'checked="checked"')[bool(sickbeard.SUBTITLES_MULTI)]}/>
+                                            <input type="checkbox" name="subtitles_multi" id="subtitles_multi" ${('', 'checked="checked"')[bool(sickbeard.SUBTITLES_MULTI)]} autocapitalize="off" />
                                             <p>Append language codes to subtitle filenames?</p>
                                         </span>
                                     </label>
                                 </div>
+                                    <label class="clearfix" for="subtitles_download_in_pp">
+                                        <span class="component-title">Subtitles in Post-Process folder</span>
+                                        <span class="component-desc">
+                                            <input type="checkbox" name="subtitles_download_in_pp" id="subtitles_download_in_pp" ${('', 'checked="checked"')[bool(sickbeard.SUBTITLES_DOWNLOAD_IN_PP)]} autocapitalize="off" />
+                                            <p>Download subtitles in post-process folder.</p>
+                                            <p>Useful if you only want the episode to be post-processed when it has subtitles associated</p>
+                                            <p>You might also want to enable the post-process setting 'Postpone if no subtitle'</p>
+                                        </span>
+                                    </label>
+                                </div>
+                                <div class="field-pair">
                                 <div class="field-pair">
                                     <label class="clearfix" for="embedded_subtitles_all">
                                         <span class="component-title">Embedded Subtitles</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="embedded_subtitles_all" id="embedded_subtitles_all" ${('', 'checked="checked"')[bool(sickbeard.EMBEDDED_SUBTITLES_ALL)]}/>
+                                            <input type="checkbox" name="embedded_subtitles_all" id="embedded_subtitles_all" ${('', 'checked="checked"')[bool(sickbeard.EMBEDDED_SUBTITLES_ALL)]} autocapitalize="off" />
                                             <p>Ignore subtitles embedded inside video file?</p>
                                             <p><b>Warning: </b>this will ignore <u>all</u> embedded subtitles for every video file!</p>
                                         </span>
@@ -113,7 +126,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                     <label class="clearfix" for="subtitles_hearing_impaired">
                                         <span class="component-title">Hearing Impaired Subtitles</span>
                                         <span class="component-desc">
-                                            <input type="checkbox" name="subtitles_hearing_impaired" id="subtitles_hearing_impaired" ${('', 'checked="checked"')[bool(sickbeard.SUBTITLES_HEARING_IMPAIRED)]}/>
+                                            <input type="checkbox" name="subtitles_hearing_impaired" id="subtitles_hearing_impaired" ${('', 'checked="checked"')[bool(sickbeard.SUBTITLES_HEARING_IMPAIRED)]} autocapitalize="off" />
                                             <p>Download hearing impaired style subtitles?</p>
                                         </span>
                                     </label>
@@ -121,7 +134,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                 <div class="field-pair">
                                     <label class="nocheck">
                                         <span class="component-title">Extra Scripts</span>
-                                           <input type="text" name="subtitles_extra_scripts" value="${'|'.join(sickbeard.SUBTITLES_EXTRA_SCRIPTS)}" class="form-control input-sm input350" />
+                                           <input type="text" name="subtitles_extra_scripts" value="${'|'.join(sickbeard.SUBTITLES_EXTRA_SCRIPTS)}" class="form-control input-sm input350"  autocapitalize="off" />
                                     </label>
                                     <label class="nocheck">
                                         <span class="component-title">&nbsp;</span>
@@ -144,7 +157,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                     </label>
                                 </div>
 
-                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
                         </div>
                     </fieldset>
                 </div><!-- /component-group1 //-->
@@ -162,7 +175,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                         <ul id="service_order_list">
                         % for curService in sickbeard.subtitles.sortedServiceList():
                             <li class="ui-state-default" id="${curService['name']}">
-                                <input type="checkbox" id="enable_${curService['name']}" class="service_enabler" ${('', 'checked="checked"')[curService['enabled'] is True]}/>
+                                <input type="checkbox" id="enable_${curService['name']}" class="service_enabler" ${('', 'checked="checked"')[curService['enabled'] is True]} autocapitalize="off" />
                                 <a href="${anon_url(curService['url'])}" class="imgLink" target="_new">
                                     <img src="${srRoot}/images/subtitles/${curService['image']}" alt="${curService['url']}" title="${curService['url']}" width="16" height="16" style="vertical-align:middle;"/>
                                 </a>
@@ -171,9 +184,9 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                           </li>
                         % endfor
                         </ul>
-                        <input type="hidden" name="service_order" id="service_order" value="<%" ".join(['%s:%d' % (x['name'], x['enabled']) for x in sickbeard.subtitles.sortedServiceList()])%>"/>
+                        <input type="hidden" name="service_order" id="service_order" value="<%" ".join(['%s:%d' % (x['name'], x['enabled']) for x in sickbeard.subtitles.sortedServiceList()])%>" autocapitalize="off" />
 
-                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
                     </fieldset>
                 </div><!-- /component-group2 //-->
                 <div id="core-component-group3" class="component-group">
@@ -198,21 +211,21 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                 <label class="nocheck" for="${curService['name']}_user">
                                     <span class="component-title">${curService['name'].capitalize()} User Name</span>
                                     <span class="component-desc">
-                                        <input type="text" name="${curService['name']}_user" id="${curService['name']}_user" value="${providerLoginDict[curService['name']]['user']}" class="form-control input-sm input300" />
+                                        <input type="text" name="${curService['name']}_user" id="${curService['name']}_user" value="${providerLoginDict[curService['name']]['user']}" class="form-control input-sm input300"  autocapitalize="off" />
                                     </span>
                                 </label>
                                 <label class="nocheck" for="${curService['name']}_pass">
                                     <span class="component-title">${curService['name'].capitalize()} Password</span>
                                     <span class="component-desc">
-                                        <input type="password" name="${curService['name']}_pass" id="${curService['name']}_pass" value="${providerLoginDict[curService['name']]['pass']}" class="form-control input-sm input300" />
+                                        <input type="password" name="${curService['name']}_pass" id="${curService['name']}_pass" value="${providerLoginDict[curService['name']]['pass']}" class="form-control input-sm input300"  autocapitalize="off" />
                                     </span>
                                 </label>
                             </div>
                         % endfor
-                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
                     </fieldset>
                 </div><!-- /component-group3 //-->
-                <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
+                <br><input type="submit" class="btn config_submitter" value="Save Changes"  autocapitalize="off" /><br>
             </div><!-- /config-components //-->
 
 </form>
diff --git a/gui/slick/views/displayShow.mako b/gui/slick/views/displayShow.mako
index 23fd582196121cf9e83f8f05437af381a446130d..e213dca5c99c54b9bcfdd45422bef89f8a4337e4 100644
--- a/gui/slick/views/displayShow.mako
+++ b/gui/slick/views/displayShow.mako
@@ -10,6 +10,7 @@
     from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, FAILED
     from sickbeard.common import Quality, qualityPresets, statusStrings, Overview
     from sickbeard.helpers import anon_url
+    from sickrage.helper.common import pretty_file_size
 %>
 <%block name="scripts">
 <script type="text/javascript" src="${srRoot}/js/lib/jquery.bookmarkscroll.js?${sbPID}"></script>
@@ -21,7 +22,7 @@
 </%block>
 <%block name="content">
 <%namespace file="/inc_defs.mako" import="renderQualityPill"/>
-<input type="hidden" id="srRoot" value="${srRoot}" />
+<input type="hidden" id="srRoot" value="${srRoot}"  autocapitalize="off" />
     <div class="pull-left form-inline">
         Change Show:
         <div class="navShow"><img id="prevShow" src="${srRoot}/images/prev.png" alt="&lt;&lt;" title="Prev Show" /></div>
@@ -201,7 +202,7 @@
                     </tr>
                 % endif
 
-                <tr><td class="showLegend">Size:</td><td>${sickbeard.helpers.pretty_filesize(sickbeard.helpers.get_size(showLoc[0]))}</td></tr>
+                <tr><td class="showLegend">Size:</td><td>${pretty_file_size(sickbeard.helpers.get_size(showLoc[0]))}</td></tr>
 
                 </table>
 
@@ -239,20 +240,20 @@
             % endif
         % endfor
         </select>
-        <input type="hidden" id="showID" value="${show.indexerid}" />
-        <input type="hidden" id="indexer" value="${show.indexer}" />
-        <input class="btn btn-inline" type="button" id="changeStatus" value="Go" />
+        <input type="hidden" id="showID" value="${show.indexerid}"  autocapitalize="off" />
+        <input type="hidden" id="indexer" value="${show.indexer}"  autocapitalize="off" />
+        <input class="btn btn-inline" type="button" id="changeStatus" value="Go"  autocapitalize="off" />
     </div>
 
     </br>
 
     <div class="pull-right clearfix" id="checkboxControls">
         <div style="padding-bottom: 5px;">
-            <label for="wanted"><span class="wanted"><input type="checkbox" id="wanted" checked="checked" /> Wanted: <b>${epCounts[Overview.WANTED]}</b></span></label>
-            <label for="qual"><span class="qual"><input type="checkbox" id="qual" checked="checked" /> Low Quality: <b>${epCounts[Overview.QUAL]}</b></span></label>
-            <label for="good"><span class="good"><input type="checkbox" id="good" checked="checked" /> Downloaded: <b>${epCounts[Overview.GOOD]}</b></span></label>
-            <label for="skipped"><span class="skipped"><input type="checkbox" id="skipped" checked="checked" /> Skipped: <b>${epCounts[Overview.SKIPPED]}</b></span></label>
-            <label for="snatched"><span class="snatched"><input type="checkbox" id="snatched" checked="checked" /> Snatched: <b>${epCounts[Overview.SNATCHED]}</b></span></label>
+            <label for="wanted"><span class="wanted"><input type="checkbox" id="wanted" checked="checked"  autocapitalize="off" /> Wanted: <b>${epCounts[Overview.WANTED]}</b></span></label>
+            <label for="qual"><span class="qual"><input type="checkbox" id="qual" checked="checked"  autocapitalize="off" /> Low Quality: <b>${epCounts[Overview.QUAL]}</b></span></label>
+            <label for="good"><span class="good"><input type="checkbox" id="good" checked="checked"  autocapitalize="off" /> Downloaded: <b>${epCounts[Overview.GOOD]}</b></span></label>
+            <label for="skipped"><span class="skipped"><input type="checkbox" id="skipped" checked="checked"  autocapitalize="off" /> Skipped: <b>${epCounts[Overview.SKIPPED]}</b></span></label>
+            <label for="snatched"><span class="snatched"><input type="checkbox" id="snatched" checked="checked"  autocapitalize="off" /> Snatched: <b>${epCounts[Overview.SNATCHED]}</b></span></label>
         </div>
 
         <button id="popover" type="button" class="btn btn-xs">Select Columns <b class="caret"></b></button>
@@ -313,7 +314,7 @@
             % if curSeason == -1:
     <thead>
         <tr class="seasoncols" style="display:none;">
-                <th data-sorter="false" data-priority="critical" class="col-checkbox"><input type="checkbox" class="seasonCheck"/></th>
+                <th data-sorter="false" data-priority="critical" class="col-checkbox"><input type="checkbox" class="seasonCheck" autocapitalize="off" /></th>
                 <th data-sorter="false" class="col-metadata">NFO</th>
                 <th data-sorter="false" class="col-metadata">TBN</th>
                 <th data-sorter="false" class="col-ep">Episode</th>
@@ -352,7 +353,7 @@
     </tbody>
     <tbody class="tablesorter-no-sort">
         <tr id="season-${epResult["season"]}-cols" class="seasoncols">
-            <th class="col-checkbox"><input type="checkbox" class="seasonCheck" id="${epResult["season"]}" /></th>
+            <th class="col-checkbox"><input type="checkbox" class="seasonCheck" id="${epResult["season"]}"  autocapitalize="off" /></th>
             <th class="col-metadata">NFO</th>
             <th class="col-metadata">TBN</th>
             <th class="col-ep">Episode</th>
@@ -392,7 +393,7 @@
     </tbody>
     <tbody class="tablesorter-no-sort">
         <tr id="season-${epResult["season"]}-cols" class="seasoncols">
-            <th class="col-checkbox"><input type="checkbox" class="seasonCheck" id="${epResult["season"]}" /></th>
+            <th class="col-checkbox"><input type="checkbox" class="seasonCheck" id="${epResult["season"]}"  autocapitalize="off" /></th>
             <th class="col-metadata">NFO</th>
             <th class="col-metadata">TBN</th>
             <th class="col-ep">Episode</th>
@@ -420,7 +421,7 @@
         <tr class="${Overview.overviewStrings[epCats[epStr]]} season-${curSeason} seasonstyle" id="${'S' + str(epResult["season"]) + 'E' + str(epResult["episode"])}">
             <td class="col-checkbox">
                 % if int(epResult["status"]) != UNAIRED:
-                    <input type="checkbox" class="epCheck" id="${str(epResult["season"])+'x'+str(epResult["episode"])}" name="${str(epResult["season"]) +"x"+str(epResult["episode"])}" />
+                    <input type="checkbox" class="epCheck" id="${str(epResult["season"])+'x'+str(epResult["episode"])}" name="${str(epResult["season"]) +"x"+str(epResult["episode"])}"  autocapitalize="off" />
                 % endif
             </td>
             <td align="center"><img src="${srRoot}/images/${("nfo-no.gif", "nfo.gif")[epResult["hasnfo"]]}" alt="${("N", "Y")[epResult["hasnfo"]]}" width="23" height="11" /></td>
@@ -444,7 +445,7 @@
                     % else:
                         value="${str(scSeas)}x${str(scEpis)}"
                     % endif
-                        style="padding: 0; text-align: center; max-width: 60px;" />
+                        style="padding: 0; text-align: center; max-width: 60px;"  autocapitalize="off" />
             </td>
             <td align="center">
                 <input type="text" placeholder="${str(dfltAbsolute)}" size="6" maxlength="8"
@@ -456,7 +457,7 @@
                     % else:
                         value="${str(scAbsolute)}"
                     % endif
-                        style="padding: 0; text-align: center; max-width: 60px;" />
+                        style="padding: 0; text-align: center; max-width: 60px;"  autocapitalize="off" />
             </td>
             <td class="col-name">
             % if epResult["description"] != "" and epResult["description"] is not None:
@@ -469,8 +470,7 @@
             <td class="col-name">${epLoc}</td>
             <td class="col-ep">
                 % if epResult["file_size"]:
-                    <% file_size = sickbeard.helpers.pretty_filesize(epResult["file_size"]) %>
-                    ${file_size}
+                    ${pretty_file_size(epResult["file_size"])}
                 % endif
             </td>
             <td class="col-airdate">
@@ -515,7 +515,7 @@
                 % endif
             <td class="col-search">
                 % if int(epResult["season"]) != 0:
-                    % if ( int(epResult["status"]) in Quality.SNATCHED + Quality.DOWNLOADED ) and sickbeard.USE_FAILED_DOWNLOADS:
+                    % if ( int(epResult["status"]) in Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.DOWNLOADED ) and sickbeard.USE_FAILED_DOWNLOADS:
                         <a class="epRetry" id="${str(show.indexerid)}x${str(epResult["season"])}x${str(epResult["episode"])}" name="${str(show.indexerid)}x${str(epResult["season"])}x${str(epResult["episode"])}" href="retryEpisode?show=${show.indexerid}&amp;season=${epResult["season"]}&amp;episode=${epResult["episode"]}"><img src="${srRoot}/images/search16.png" height="16" alt="retry" title="Retry Download" /></a>
                     % else:
                         <a class="epSearch" id="${str(show.indexerid)}x${str(epResult["season"])}x${str(epResult["episode"])}" name="${str(show.indexerid)}x${str(epResult["season"])}x${str(epResult["episode"])}" href="searchEpisode?show=${show.indexerid}&amp;season=${epResult["season"]}&amp;episode=${epResult["episode"]}"><img src="${srRoot}/images/search16.png" width="16" height="16" alt="search" title="Manual Search" /></a>
diff --git a/gui/slick/views/editShow.mako b/gui/slick/views/editShow.mako
index 299168570c6e184e613eb6e108dfe120d375dc2f..a16672e695cf46a80d87d7eee841cc4a1a1e4682 100644
--- a/gui/slick/views/editShow.mako
+++ b/gui/slick/views/editShow.mako
@@ -49,8 +49,8 @@
                             <label for="location">
                                 <span class="component-title">Show Location</span>
                                 <span class="component-desc">
-                                    <input type="hidden" name="show" value="${show.indexerid}" />
-                                    <input type="text" name="location" id="location" value="${show._location}" class="form-control form-control-inline input-sm input350" />
+                                    <input type="hidden" name="show" value="${show.indexerid}"  autocapitalize="off" />
+                                    <input type="text" name="location" id="location" value="${show._location}" class="form-control form-control-inline input-sm input350"  autocapitalize="off" />
                                 </span>
                             </label>
                         </div>
@@ -73,7 +73,7 @@
                             <label for="">
                                 <span class="component-title">Archive on first match</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="archive_firstmatch" name="archive_firstmatch" ${('', 'checked="checked"')[show.archive_firstmatch == 1]} /> archive episode after the first best match is found from your archive quality list
+                                    <input type="checkbox" id="archive_firstmatch" name="archive_firstmatch" ${('', 'checked="checked"')[show.archive_firstmatch == 1]}  autocapitalize="off" /> archive episode after the first best match is found from your archive quality list
                                 </span>
                             </label>
                         </div>
@@ -106,7 +106,7 @@
                             <label for="subtitles">
                                 <span class="component-title">Subtitles</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="subtitles" name="subtitles" ${('', 'checked="checked"')[show.subtitles == 1 and sickbeard.USE_SUBTITLES is True]} ${('disabled="disabled"', '')[bool(sickbeard.USE_SUBTITLES)]}/> search for subtitles
+                                    <input type="checkbox" id="subtitles" name="subtitles" ${('', 'checked="checked"')[show.subtitles == 1 and sickbeard.USE_SUBTITLES is True]} ${('disabled="disabled"', '')[bool(sickbeard.USE_SUBTITLES)]} autocapitalize="off" /> search for subtitles
                                 </span>
                             </label>
                         </div>
@@ -115,7 +115,7 @@
                             <label for="paused">
                                 <span class="component-title">Paused</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="paused" name="paused" ${('', 'checked="checked"')[show.paused == 1]} /> pause this show (SickRage will not download episodes)
+                                    <input type="checkbox" id="paused" name="paused" ${('', 'checked="checked"')[show.paused == 1]}  autocapitalize="off" /> pause this show (SickRage will not download episodes)
                                 </span>
                             </label>
                         </div>
@@ -133,7 +133,7 @@
                             <label for="airbydate">
                                 <span class="component-title">Air by date</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="airbydate" name="air_by_date" ${('', 'checked="checked"')[show.air_by_date == 1]} /> check if the show is released as Show.03.02.2010 rather than Show.S02E03.<br>
+                                    <input type="checkbox" id="airbydate" name="air_by_date" ${('', 'checked="checked"')[show.air_by_date == 1]}  autocapitalize="off" /> check if the show is released as Show.03.02.2010 rather than Show.S02E03.<br>
                                     <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span>
                                 </span>
                             </label>
@@ -155,7 +155,7 @@
                             <label for="sports">
                                 <span class="component-title">Sports</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="sports" name="sports" ${('', 'checked="checked"')[show.sports == 1]}/> check if the show is a sporting or MMA event released as Show.03.02.2010 rather than Show.S02E03<br>
+                                    <input type="checkbox" id="sports" name="sports" ${('', 'checked="checked"')[show.sports == 1]} autocapitalize="off" /> check if the show is a sporting or MMA event released as Show.03.02.2010 rather than Show.S02E03<br>
                                     <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span>
                                 </span>
                             </label>
@@ -165,7 +165,7 @@
                             <label for="season_folders">
                                 <span class="component-title">Season folders</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="season_folders" name="flatten_folders" ${('checked="checked"', '')[show.flatten_folders == 1 and not sickbeard.NAMING_FORCE_FOLDERS]} ${('', 'disabled="disabled"')[bool(sickbeard.NAMING_FORCE_FOLDERS)]}/> group episodes by season folder (uncheck to store in a single folder)
+                                    <input type="checkbox" id="season_folders" name="flatten_folders" ${('checked="checked"', '')[show.flatten_folders == 1 and not sickbeard.NAMING_FORCE_FOLDERS]} ${('', 'disabled="disabled"')[bool(sickbeard.NAMING_FORCE_FOLDERS)]} autocapitalize="off" /> group episodes by season folder (uncheck to store in a single folder)
                                 </span>
                             </label>
                         </div>
@@ -174,7 +174,7 @@
                             <label for="scene">
                                 <span class="component-title">Scene Numbering</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="scene" name="scene" ${('', 'checked="checked"')[show.scene == 1]} /> search by scene numbering (uncheck to search by indexer numbering)
+                                    <input type="checkbox" id="scene" name="scene" ${('', 'checked="checked"')[show.scene == 1]}  autocapitalize="off" /> search by scene numbering (uncheck to search by indexer numbering)
                                 </span>
                             </label>
                         </div>
@@ -183,7 +183,7 @@
                             <label for="dvdorder">
                                 <span class="component-title">DVD Order</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="dvdorder" name="dvdorder" ${('', 'checked="checked"')[show.dvdorder == 1]} /> use the DVD order instead of the air order<br>
+                                    <input type="checkbox" id="dvdorder" name="dvdorder" ${('', 'checked="checked"')[show.dvdorder == 1]}  autocapitalize="off" /> use the DVD order instead of the air order<br>
                                     <div class="clear-left"><p>A "Force Full Update" is necessary, and if you have existing episodes you need to sort them manually.</p></div>
                                 </span>
                             </label>
@@ -202,7 +202,7 @@
                             <label for="rls_ignore_words">
                                 <span class="component-title">Ignored Words</span>
                                 <span class="component-desc">
-                                    <input type="text" id="rls_ignore_words" name="rls_ignore_words" id="rls_ignore_words" value="${show.rls_ignore_words}" class="form-control form-control-inline input-sm input350" /><br>
+                                    <input type="text" id="rls_ignore_words" name="rls_ignore_words" id="rls_ignore_words" value="${show.rls_ignore_words}" class="form-control form-control-inline input-sm input350"  autocapitalize="off" /><br>
                                     <div class="clear-left">
                                         <p>comma-separated <i>e.g. "word1,word2,word3"</i></>
                                         <p>Search results with one or more words from this list will be ignored.</p>
@@ -215,7 +215,7 @@
                             <label for="rls_require_words">
                                 <span class="component-title">Required Words</span>
                                 <span class="component-desc">
-                                    <input type="text" id="rls_require_words" name="rls_require_words" id="rls_require_words" value="${show.rls_require_words}" class="form-control form-control-inline input-sm input350" /><br>
+                                    <input type="text" id="rls_require_words" name="rls_require_words" id="rls_require_words" value="${show.rls_require_words}" class="form-control form-control-inline input-sm input350"  autocapitalize="off" /><br>
                                     <div class="clear-left">
                                         <p>comma-separated <i>e.g. "word1,word2,word3"</i></p>
                                         <p>Search results with no words from this list will be ignored.</p>
@@ -228,14 +228,14 @@
                             <label for="SceneName">
                                 <span class="component-title">Scene Exception</span>
                                 <span class="component-desc">
-                                    <input type="text" id="SceneName" class="form-control form-control-inline input-sm input200" /><input class="btn btn-inline" type="button" value="Add" id="addSceneName" /><br><br>
+                                    <input type="text" id="SceneName" class="form-control form-control-inline input-sm input200"  autocapitalize="off" /><input class="btn btn-inline" type="button" value="Add" id="addSceneName"  autocapitalize="off" /><br><br>
                                     <div class="pull-left">
                                         <select id="exceptions_list" name="exceptions_list" multiple="multiple" style="min-width:200px;height:99px;">
                                         % for cur_exception in show.exceptions:
                                             <option value="${cur_exception}">${cur_exception}</option>
                                         % endfor
                                         </select>
-                                        <div><input id="removeSceneName" value="Remove" class="btn float-left" type="button" style="margin-top: 10px;"/></div>
+                                        <div><input id="removeSceneName" value="Remove" class="btn float-left" type="button" style="margin-top: 10px;" autocapitalize="off" /></div>
                                     </div>
                                     <div class="clear-left"><p>This will affect episode search on NZB and torrent providers. This list overrides the original name; it doesn't append to it.</p></div>
                                 </span>
diff --git a/gui/slick/views/home.mako b/gui/slick/views/home.mako
index 431137155ad592f82290d61f807952451c1ea06e..df431a375c11b71f216b57c55e2505ee9f4555cd 100644
--- a/gui/slick/views/home.mako
+++ b/gui/slick/views/home.mako
@@ -4,6 +4,7 @@
     import calendar
     from sickbeard import sbdatetime
     from sickbeard import network_timezones
+    from sickrage.helper.common import pretty_file_size
     import re
 %>
 <%block name="metas">
@@ -299,23 +300,21 @@
         if not cur_total:
             cur_total = 0
 
-    if cur_total != 0:
-        download_stat = str(cur_downloaded)
-        download_stat_tip = "Downloaded: " + str(cur_downloaded)
-        if cur_snatched > 0:
-            download_stat = download_stat + "+" + str(cur_snatched)
-            download_stat_tip = download_stat_tip + "&#013;" + "Snatched: " + str(cur_snatched)
+    download_stat = str(cur_downloaded)
+    download_stat_tip = "Downloaded: " + str(cur_downloaded)
+    if cur_snatched:
+        download_stat = download_stat + "+" + str(cur_snatched)
+        download_stat_tip = download_stat_tip + "&#013;" + "Snatched: " + str(cur_snatched)
 
-        download_stat = download_stat + " / " + str(cur_total)
-        download_stat_tip = download_stat_tip + "&#013;" + "Total: " + str(cur_total)
-    else:
-        download_stat = '?'
-        download_stat_tip = "no data"
+    download_stat = download_stat + " / " + str(cur_total)
+    download_stat_tip = download_stat_tip + "&#013;" + "Total: " + str(cur_total)
 
     nom = cur_downloaded
-    den = cur_total
-    if den == 0:
+    if cur_total:
+        den = cur_total
+    else:
         den = 1
+        download_stat_tip = "Unaired"
 
     progressbar_percent = nom * 100 / den
 %>
@@ -393,7 +392,7 @@
         </td>
 
         ## <% show_size = sickbeard.helpers.get_size(curShow._location) %>
-        ## <td align="center" data-show-size="${show_size}">${sickbeard.helpers.pretty_filesize(show_size)}</td>
+        ## <td align="center" data-show-size="${show_size}">${pretty_file_size(show_size)}</td>
 
         <td align="center">
             <% paused = int(curShow.paused) == 0 and curShow.status == 'Continuing' %>
diff --git a/gui/slick/views/home_addExistingShow.mako b/gui/slick/views/home_addExistingShow.mako
index 902429e6ba7945de409a708d7ef7fad849d41a70..5a39036099f5041e371ca350669f047da5d30c84 100644
--- a/gui/slick/views/home_addExistingShow.mako
+++ b/gui/slick/views/home_addExistingShow.mako
@@ -41,7 +41,7 @@
     <p>SickRage can add existing shows, using the current options, by using locally stored NFO/XML metadata to eliminate user interaction.
     If you would rather have SickRage prompt you to customize each show, then use the checkbox below.</p>
 
-    <p><input type="checkbox" name="promptForSettings" id="promptForSettings" /> <label for="promptForSettings">Prompt me to set settings for each show</label></p>
+    <p><input type="checkbox" name="promptForSettings" id="promptForSettings"  autocapitalize="off" /> <label for="promptForSettings">Prompt me to set settings for each show</label></p>
 
     <hr />
 
@@ -52,7 +52,7 @@
     <div id="tableDiv"></div>
     <br>
     <br>
-    <input class="btn btn-primary" type="button" value="Submit" id="submitShowDirs" />
+    <input class="btn btn-primary" type="button" value="Submit" id="submitShowDirs"  autocapitalize="off" />
 
     </form>
 
diff --git a/gui/slick/views/home_newShow.mako b/gui/slick/views/home_newShow.mako
index 6905df264290f57e0007e556907b0bdcca2105b7..9137f8e01e42844f7146936338da38d0d69c3c44 100644
--- a/gui/slick/views/home_newShow.mako
+++ b/gui/slick/views/home_newShow.mako
@@ -34,16 +34,16 @@
         <legend class="legendStep">Find a show on theTVDB</legend>
 
         <div class="stepDiv">
-            <input type="hidden" id="indexer_timeout" value="${sickbeard.INDEXER_TIMEOUT}" />
+            <input type="hidden" id="indexer_timeout" value="${sickbeard.INDEXER_TIMEOUT}"  autocapitalize="off" />
 
             % if use_provided_info:
                 Show retrieved from existing metadata: <a href="${anon_url(sickbeard.indexerApi(provided_indexer).config['show_url'], provided_indexer_id)}">${provided_indexer_name}</a>
-                <input type="hidden" id="indexerLang" name="indexerLang" value="en" />
-                <input type="hidden" id="whichSeries" name="whichSeries" value="${provided_indexer_id}" />
-                <input type="hidden" id="providedIndexer" name="providedIndexer" value="${provided_indexer}" />
-                <input type="hidden" id="providedName" value="${provided_indexer_name}" />
+                <input type="hidden" id="indexerLang" name="indexerLang" value="en"  autocapitalize="off" />
+                <input type="hidden" id="whichSeries" name="whichSeries" value="${provided_indexer_id}"  autocapitalize="off" />
+                <input type="hidden" id="providedIndexer" name="providedIndexer" value="${provided_indexer}"  autocapitalize="off" />
+                <input type="hidden" id="providedName" value="${provided_indexer_name}"  autocapitalize="off" />
             % else:
-                <input type="text" id="nameToSearch" value="${default_show_name}" class="form-control form-control-inline input-sm input350" />
+                <input type="text" id="nameToSearch" value="${default_show_name}" class="form-control form-control-inline input-sm input350"  autocapitalize="off" />
                 &nbsp;&nbsp;
                 <select name="indexerLang" id="indexerLangSelect" class="form-control form-control-inline input-sm bfh-languages" data-language="${sickbeard.INDEXER_DEFAULT_LANGUAGE}" data-available="${','.join(sickbeard.indexerApi().config['valid_languages'])}">
                 </select><b>*</b>
@@ -57,7 +57,7 @@
                     % endfor
                 </select>
                 &nbsp;
-                <input class="btn btn-inline" type="button" id="searchName" value="Search" />
+                <input class="btn btn-inline" type="button" id="searchName" value="Search"  autocapitalize="off" />
 
                 <br><br>
                 <b>*</b> This will only affect the language of the retrieved metadata file contents and episode filenames.<br>
@@ -74,7 +74,7 @@
         <div class="stepDiv">
             % if provided_show_dir:
                 Pre-chosen Destination Folder: <b>${provided_show_dir}</b> <br>
-                <input type="hidden" id="fullShowPath" name="fullShowPath" value="${provided_show_dir}" /><br>
+                <input type="hidden" id="fullShowPath" name="fullShowPath" value="${provided_show_dir}"  autocapitalize="off" /><br>
             % else:
                 <%include file="/inc_rootDirs.mako"/>
             % endif
@@ -89,17 +89,17 @@
     </fieldset>
 
     % for curNextDir in other_shows:
-    <input type="hidden" name="other_shows" value="${curNextDir}" />
+    <input type="hidden" name="other_shows" value="${curNextDir}"  autocapitalize="off" />
     % endfor
-    <input type="hidden" name="skipShow" id="skipShow" value="" />
+    <input type="hidden" name="skipShow" id="skipShow" value=""  autocapitalize="off" />
     </form>
 
 <br>
 
 <div style="width: 100%; text-align: center;">
-<input class="btn" type="button" id="addShowButton" value="Add Show" disabled="disabled" />
+<input class="btn" type="button" id="addShowButton" value="Add Show" disabled="disabled"  autocapitalize="off" />
 % if provided_show_dir:
-<input class="btn" type="button" id="skipShowButton" value="Skip Show" />
+<input class="btn" type="button" id="skipShowButton" value="Skip Show"  autocapitalize="off" />
 % endif
 </div>
 </div></div></div></div>
diff --git a/gui/slick/views/home_postprocess.mako b/gui/slick/views/home_postprocess.mako
index 8876ebd9c2ed11848b9bd1ff332edab78b8c3755..dc2fdac89bb086a385c8df3dafde1c061f2c32a3 100644
--- a/gui/slick/views/home_postprocess.mako
+++ b/gui/slick/views/home_postprocess.mako
@@ -19,7 +19,7 @@
                 <b>Enter the folder containing the episode:</b>
             </td>
             <td>
-                <input type="text" name="dir" id="episodeDir" class="form-control form-control-inline input-sm input350" />
+                <input type="text" name="dir" id="episodeDir" class="form-control form-control-inline input-sm input350"  autocapitalize="off" />
             </td>
         </tr>
         <tr>
@@ -72,7 +72,7 @@
         </tr>
         % endif
     </table>
-        <input id="submit" class="btn" type="submit" value="Process" />
+        <input id="submit" class="btn" type="submit" value="Process"  autocapitalize="off" />
     </form>
 </div>
 </%block>
diff --git a/gui/slick/views/inc_addShowOptions.mako b/gui/slick/views/inc_addShowOptions.mako
index bfeb9b4653c54aa20618f28e1b5cbf3f9b737f90..d6f4655fa2b9f159748ee59883812e488887d162 100644
--- a/gui/slick/views/inc_addShowOptions.mako
+++ b/gui/slick/views/inc_addShowOptions.mako
@@ -9,7 +9,7 @@
             <label for="subtitles" class="clearfix">
                 <span class="component-title">Subtitles</span>
                 <span class="component-desc">
-                     <input type="checkbox" name="subtitles" id="subtitles" ${('', 'checked="checked"')[bool(sickbeard.SUBTITLES_DEFAULT)]} />
+                     <input type="checkbox" name="subtitles" id="subtitles" ${('', 'checked="checked"')[bool(sickbeard.SUBTITLES_DEFAULT)]}  autocapitalize="off" />
                     <p>Download subtitles for this show?</p>
                 </span>
             </label>
@@ -44,7 +44,7 @@
             <label for="flatten_folders" class="clearfix">
                 <span class="component-title">Flatten Folders</span>
                 <span class="component-desc">
-                    <input class="cb" type="checkbox" name="flatten_folders" id="flatten_folders" ${('', 'checked="checked"')[bool(sickbeard.FLATTEN_FOLDERS_DEFAULT)]}/>
+                    <input class="cb" type="checkbox" name="flatten_folders" id="flatten_folders" ${('', 'checked="checked"')[bool(sickbeard.FLATTEN_FOLDERS_DEFAULT)]} autocapitalize="off" />
                     <p>Disregard sub-folders?</p>
                 </span>
             </label>
@@ -55,7 +55,7 @@
             <label for="anime" class="clearfix">
                 <span class="component-title">Anime</span>
                 <span class="component-desc">
-                    <input type="checkbox" name="anime" id="anime" ${('', 'checked="checked"')[bool(sickbeard.ANIME_DEFAULT)]} />
+                    <input type="checkbox" name="anime" id="anime" ${('', 'checked="checked"')[bool(sickbeard.ANIME_DEFAULT)]}  autocapitalize="off" />
                     <p>Is this show an Anime?<p>
                 </span>
             </label>
@@ -66,7 +66,7 @@
             <label for="scene" class="clearfix">
                 <span class="component-title">Scene Numbering</span>
                 <span class="component-desc">
-                    <input type="checkbox" name="scene" id="scene" ${('', 'checked="checked"')[bool(sickbeard.SCENE_DEFAULT)]} />
+                    <input type="checkbox" name="scene" id="scene" ${('', 'checked="checked"')[bool(sickbeard.SCENE_DEFAULT)]}  autocapitalize="off" />
                     <p>Is this show scene numbered?</p>
                 </span>
             </label>
@@ -76,7 +76,7 @@
             <label for="archive" class="clearfix">
                 <span class="component-title">Archive first match</span>
                 <span class="component-desc">
-                    <input type="checkbox" name="archive" id="archive" ${('', 'checked="checked"')[bool(sickbeard.ARCHIVE_DEFAULT)]} />
+                    <input type="checkbox" name="archive" id="archive" ${('', 'checked="checked"')[bool(sickbeard.ARCHIVE_DEFAULT)]}  autocapitalize="off" />
                     <p>Archive episodes after downloading first match?</p>
                 </span>
             </label>
@@ -90,7 +90,7 @@
         <br>
         <div class="field-pair alt">
             <label for="saveDefaultsButton" class="nocheck clearfix">
-                <span class="component-title"><input class="btn btn-inline" type="button" id="saveDefaultsButton" value="Save Defaults" disabled="disabled" /></span>
+                <span class="component-title"><input class="btn btn-inline" type="button" id="saveDefaultsButton" value="Save Defaults" disabled="disabled"  autocapitalize="off" /></span>
                 <span class="component-desc">
                     <p>Use current values as the defaults</p>
                 </span>
@@ -101,5 +101,5 @@
     <% import sickbeard.blackandwhitelist %>
     <%include file="/inc_blackwhitelist.mako"/>
 % else:
-        <input type="hidden" name="anime" id="anime" value="0" />
+        <input type="hidden" name="anime" id="anime" value="0"  autocapitalize="off" />
 % endif
diff --git a/gui/slick/views/inc_blackwhitelist.mako b/gui/slick/views/inc_blackwhitelist.mako
index 37cc9fb65d8669432e430faccc6c1b555ee52844..5e9157fa9e39542b3a6030516f90addf838d161e 100644
--- a/gui/slick/views/inc_blackwhitelist.mako
+++ b/gui/slick/views/inc_blackwhitelist.mako
@@ -1,6 +1,6 @@
 <div id="blackwhitelist">
-    <input type="hidden" name="whitelist" id="whitelist"/>
-    <input type="hidden" name="blacklist" id="blacklist"/>
+    <input type="hidden" name="whitelist" id="whitelist" autocapitalize="off" />
+    <input type="hidden" name="blacklist" id="blacklist" autocapitalize="off" />
 
     <b>Fansub Groups:</b>
         <div >
@@ -22,7 +22,7 @@
                         % endfor
                     </select>
                     <br>
-                    <input class="btn" id="removeW" value="Remove" type="button"/>
+                    <input class="btn" id="removeW" value="Remove" type="button" autocapitalize="off" />
                 </div>
                 <div class="blackwhitelist pool">
                     <span><h4>Available Groups</h4></span>
@@ -34,8 +34,8 @@
                     % endfor
                     </select>
                     <br>
-                    <input class="btn" id="addW" value="Add to Whitelist" type="button"/>
-                    <input class="btn" id="addB" value="Add to Blacklist" type="button"/>
+                    <input class="btn" id="addW" value="Add to Whitelist" type="button" autocapitalize="off" />
+                    <input class="btn" id="addB" value="Add to Blacklist" type="button" autocapitalize="off" />
                 </div>
                 <div class="blackwhitelist black">
                     <span><h4>Blacklist</h4></span>
@@ -45,12 +45,12 @@
                         % endfor
                     </select>
                     <br>
-                    <input class="btn" id="removeB" value="Remove" type="button"/>
+                    <input class="btn" id="removeB" value="Remove" type="button" autocapitalize="off" />
                 </div>
             </div>
             <br style="clear:both" />
             <div class="blackwhitelist manual">
-                <input type="text" id="addToPoolText" class="form-control form-control-inline input-sm input250" />
+                <input type="text" id="addToPoolText" class="form-control form-control-inline input-sm input250"  autocapitalize="off" />
                 <input class="btn btn-inline" type="button" value="Add to Whitelist" id="addToWhite">
                 <input class="btn btn-inline" type="button" value="Add to Blacklist" id="addToBlack">
             </div>
diff --git a/gui/slick/views/inc_rootDirs.mako b/gui/slick/views/inc_rootDirs.mako
index ecdec42255be6864b5c5397236fde1cb664ad22a..8196c1b1c73a3b4f9b6226b5358a99c5b194bfe8 100644
--- a/gui/slick/views/inc_rootDirs.mako
+++ b/gui/slick/views/inc_rootDirs.mako
@@ -12,7 +12,7 @@
 
 <span id="sampleRootDir"></span>
 
-<input type="hidden" id="whichDefaultRootDir" value="${backend_default}" />
+<input type="hidden" id="whichDefaultRootDir" value="${backend_default}"  autocapitalize="off" />
 <div class="rootdir-selectbox">
     <select name="rootDir" id="rootDirs" size="6">
     % for cur_dir in backend_dirs:
@@ -21,9 +21,9 @@
     </select>
 </div>
 <div id="rootDirsControls" class="rootdir-controls">
-    <input class="btn" type="button" id="addRootDir" value="New" />
-    <input class="btn" type="button" id="editRootDir" value="Edit" />
-    <input class="btn" type="button" id="deleteRootDir" value="Delete" />
-    <input class="btn" type="button" id="defaultRootDir" value="Set as Default *" />
+    <input class="btn" type="button" id="addRootDir" value="New"  autocapitalize="off" />
+    <input class="btn" type="button" id="editRootDir" value="Edit"  autocapitalize="off" />
+    <input class="btn" type="button" id="deleteRootDir" value="Delete"  autocapitalize="off" />
+    <input class="btn" type="button" id="defaultRootDir" value="Set as Default *"  autocapitalize="off" />
 </div>
-<input type="text" style="display: none" id="rootDirText" />
+<input type="text" style="display: none" id="rootDirText"  autocapitalize="off" />
diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index 19fcb9965b463ad3cd2721cec972f892edd7e1da..3b850185cad01a60fd8ad8c7d9dacccadb4e611c 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -3,6 +3,7 @@
     import re
     import sickbeard
     from sickbeard import network_timezones
+    from sickrage.helper.common import pretty_file_size
     from sickrage.show.Show import Show
     from time import time
 
@@ -301,7 +302,7 @@
 
                 <div>
                     % if has_resource_module:
-                    Memory used: <span class="footerhighlight">${sickbeard.helpers.pretty_filesize(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)}</span> |
+                    Memory used: <span class="footerhighlight">${pretty_file_size(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)}</span> |
                     % endif
                     Load time: <span class="footerhighlight">${"%.4f" % (time() - sbStartTime)}s</span> / Mako: <span class="footerhighlight">${"%.4f" % (time() - makoStartTime)}s</span> |
                     Branch: <span class="footerhighlight">${sickbeard.BRANCH}</span> |
diff --git a/gui/slick/views/login.mako b/gui/slick/views/login.mako
index 57a20f0cc9a353810446bacf5db65fd484b7c9f1..c863b8d65d447acab4dcb7b8b737846ef71e47ff 100644
--- a/gui/slick/views/login.mako
+++ b/gui/slick/views/login.mako
@@ -3,11 +3,11 @@
 <div class="login">
     <form action="" method="post">
         <h1>SickRage</h1>
-        <div class="ctrlHolder"><input class="inlay" name="username" type="text" placeholder="Username" autocomplete="off" /></div>
-        <div class="ctrlHolder"><input class="inlay" name="password" type="password" placeholder="Password" autocomplete="off" /></div>
+        <div class="ctrlHolder"><input class="inlay" name="username" type="text" placeholder="Username" autocomplete="off"  autocapitalize="off" /></div>
+        <div class="ctrlHolder"><input class="inlay" name="password" type="password" placeholder="Password" autocomplete="off"  autocapitalize="off" /></div>
         <div class="ctrlHolder">
-            <label class="remember_me" title="for 30 days"><input class="inlay" id="remember_me" name="remember_me" type="checkbox" value="1"checked="checked" /> Remember me</label>
-            <input class="button" name="submit" type="submit" value="Login" />
+            <label class="remember_me" title="for 30 days"><input class="inlay" id="remember_me" name="remember_me" type="checkbox" value="1"checked="checked"  autocapitalize="off" /> Remember me</label>
+            <input class="button" name="submit" type="submit" value="Login"  autocapitalize="off" />
         </div>
     </form>
 </div>
diff --git a/gui/slick/views/manage.mako b/gui/slick/views/manage.mako
index bcac1e4bd9a5cbad61c83e517c6d20c9e0be3aeb..23b8c5993e7e23dbc12fc3bbe6bab763a00f4af5 100644
--- a/gui/slick/views/manage.mako
+++ b/gui/slick/views/manage.mako
@@ -19,7 +19,7 @@
 <table id="massUpdateTable" class="sickbeardTable tablesorter" cellspacing="1" border="0" cellpadding="0">
     <thead>
         <tr>
-            <th class="col-checkbox">Edit<br><input type="checkbox" class="bulkCheck" id="editCheck" /></th>
+            <th class="col-checkbox">Edit<br><input type="checkbox" class="bulkCheck" id="editCheck"  autocapitalize="off" /></th>
             <th class="nowrap" style="text-align: left;">Show Name</th>
             <th class="col-quality">Quality</th>
             <th class="col-legend">Sports</th>
@@ -31,22 +31,22 @@
             <th class="col-legend">Subtitle</th>
             <th class="col-legend">Default Ep<br>Status</th>
             <th class="col-legend">Status</th>
-            <th width="1%">Update<br><input type="checkbox" class="bulkCheck" id="updateCheck" /></th>
-            <th width="1%">Rescan<br><input type="checkbox" class="bulkCheck" id="refreshCheck" /></th>
-            <th width="1%">Rename<br><input type="checkbox" class="bulkCheck" id="renameCheck" /></th>
+            <th width="1%">Update<br><input type="checkbox" class="bulkCheck" id="updateCheck"  autocapitalize="off" /></th>
+            <th width="1%">Rescan<br><input type="checkbox" class="bulkCheck" id="refreshCheck"  autocapitalize="off" /></th>
+            <th width="1%">Rename<br><input type="checkbox" class="bulkCheck" id="renameCheck"  autocapitalize="off" /></th>
         % if sickbeard.USE_SUBTITLES:
-            <th width="1%">Search Subtitle<br><input type="checkbox" class="bulkCheck" id="subtitleCheck" /></th>
+            <th width="1%">Search Subtitle<br><input type="checkbox" class="bulkCheck" id="subtitleCheck"  autocapitalize="off" /></th>
         % endif
-            <!-- <th>Force Metadata Regen <input type="checkbox" class="bulkCheck" id="metadataCheck" /></th>//-->
-            <th width="1%">Delete<br><input type="checkbox" class="bulkCheck" id="deleteCheck" /></th>
-            <th width="1%">Remove<br><input type="checkbox" class="bulkCheck" id="removeCheck" /></th>
+            <!-- <th>Force Metadata Regen <input type="checkbox" class="bulkCheck" id="metadataCheck"  autocapitalize="off" /></th>//-->
+            <th width="1%">Delete<br><input type="checkbox" class="bulkCheck" id="deleteCheck"  autocapitalize="off" /></th>
+            <th width="1%">Remove<br><input type="checkbox" class="bulkCheck" id="removeCheck"  autocapitalize="off" /></th>
         </tr>
     </thead>
 
     <tfoot>
         <tr>
-            <td rowspan="1" colspan="2" class="align-center alt"><input class="btn pull-left" type="button" value="Edit Selected" id="submitMassEdit" /></td>
-            <td rowspan="1" colspan="${(15, 16)[bool(sickbeard.USE_SUBTITLES)]}" class="align-right alt"><input class="btn pull-right" type="button" value="Submit" id="submitMassUpdate" /></td>
+            <td rowspan="1" colspan="2" class="align-center alt"><input class="btn pull-left" type="button" value="Edit Selected" id="submitMassEdit"  autocapitalize="off" /></td>
+            <td rowspan="1" colspan="${(15, 16)[bool(sickbeard.USE_SUBTITLES)]}" class="align-right alt"><input class="btn pull-right" type="button" value="Submit" id="submitMassUpdate"  autocapitalize="off" /></td>
         </tr>
     </tfoot>
 
@@ -67,39 +67,39 @@
             <% curUpdate_disabled = "disabled=\"disabled\" " %>
         % endif
 
-        <% curUpdate = "<input type=\"checkbox\" class=\"updateCheck\" id=\"update-"+str(curShow.indexerid)+"\" "+curUpdate_disabled+"/>" %>
+        <% curUpdate = "<input type=\"checkbox\" class=\"updateCheck\" id=\"update-"+str(curShow.indexerid)+"\" "+curUpdate_disabled+" autocapitalize="off" />" %>
 
         % if sickbeard.showQueueScheduler.action.isBeingRefreshed(curShow) or sickbeard.showQueueScheduler.action.isInRefreshQueue(curShow):
             <% curRefresh_disabled = "disabled=\"disabled\" " %>
         % endif
 
-        <% curRefresh = "<input type=\"checkbox\" class=\"refreshCheck\" id=\"refresh-"+str(curShow.indexerid)+"\" "+curRefresh_disabled+"/>" %>
+        <% curRefresh = "<input type=\"checkbox\" class=\"refreshCheck\" id=\"refresh-"+str(curShow.indexerid)+"\" "+curRefresh_disabled+" autocapitalize="off" />" %>
 
         % if sickbeard.showQueueScheduler.action.isBeingRenamed(curShow) or sickbeard.showQueueScheduler.action.isInRenameQueue(curShow):
             <% curRename = "disabled=\"disabled\" " %>
         % endif
 
-        <% curRename = "<input type=\"checkbox\" class=\"renameCheck\" id=\"rename-"+str(curShow.indexerid)+"\" "+curRename_disabled+"/>" %>
+        <% curRename = "<input type=\"checkbox\" class=\"renameCheck\" id=\"rename-"+str(curShow.indexerid)+"\" "+curRename_disabled+" autocapitalize="off" />" %>
 
         % if not curShow.subtitles or sickbeard.showQueueScheduler.action.isBeingSubtitled(curShow) or sickbeard.showQueueScheduler.action.isInSubtitleQueue(curShow):
             <% curSubtitle_disabled = "disabled=\"disabled\" " %>
         % endif
 
-        <% curSubtitle = "<input type=\"checkbox\" class=\"subtitleCheck\" id=\"subtitle-"+str(curShow.indexerid)+"\" "+curSubtitle_disabled+"/>" %>
+        <% curSubtitle = "<input type=\"checkbox\" class=\"subtitleCheck\" id=\"subtitle-"+str(curShow.indexerid)+"\" "+curSubtitle_disabled+" autocapitalize="off" />" %>
 
         % if sickbeard.showQueueScheduler.action.isBeingRenamed(curShow) or sickbeard.showQueueScheduler.action.isInRenameQueue(curShow) or sickbeard.showQueueScheduler.action.isInRefreshQueue(curShow):
             <% curDelete = "disabled=\"disabled\" " %>
         % endif
 
-        <% curDelete = "<input type=\"checkbox\" class=\"deleteCheck\" id=\"delete-"+str(curShow.indexerid)+"\" "+curDelete_disabled+"/>" %>
+        <% curDelete = "<input type=\"checkbox\" class=\"deleteCheck\" id=\"delete-"+str(curShow.indexerid)+"\" "+curDelete_disabled+" autocapitalize="off" />" %>
 
         % if sickbeard.showQueueScheduler.action.isBeingRenamed(curShow) or sickbeard.showQueueScheduler.action.isInRenameQueue(curShow) or sickbeard.showQueueScheduler.action.isInRefreshQueue(curShow):
             <% curRemove = "disabled=\"disabled\" " %>
         % endif
 
-        <% curRemove = "<input type=\"checkbox\" class=\"removeCheck\" id=\"remove-"+str(curShow.indexerid)+"\" "+curRemove_disabled+"/>" %>
+        <% curRemove = "<input type=\"checkbox\" class=\"removeCheck\" id=\"remove-"+str(curShow.indexerid)+"\" "+curRemove_disabled+" autocapitalize="off" />" %>
         <tr>
-            <td align="center"><input type="checkbox" class="editCheck" id="edit-${curShow.indexerid}" /></td>
+            <td align="center"><input type="checkbox" class="editCheck" id="edit-${curShow.indexerid}"  autocapitalize="off" /></td>
             <td class="tvShow"><a href="${srRoot}/home/displayShow?show=${curShow.indexerid}">${curShow.name}</a></td>
             <td align="center">${renderQualityPill(curShow.quality, showTitle=True)}</td>
             <td align="center"><img src="${srRoot}/images/${('no16.png" alt="N"', 'yes16.png" alt="Y"')[int(curShow.is_sports) == 1]} width="16" height="16" /></td>
diff --git a/gui/slick/views/manage_backlogOverview.mako b/gui/slick/views/manage_backlogOverview.mako
index 449418457d9ecb1f435f3f0cd25912fc4d3894a7..9a06ea968251ad4fa2a20d056b5d399239bb01c3 100644
--- a/gui/slick/views/manage_backlogOverview.mako
+++ b/gui/slick/views/manage_backlogOverview.mako
@@ -20,16 +20,20 @@
 % endif
 
 <%
-    totalWanted = 0
-    totalQual = 0
-    backLogShows = sorted([x for x in sickbeard.showList if showCounts[x.indexerid][Overview.QUAL] + showCounts[x.indexerid][Overview.WANTED]], key=lambda x: x.name)
+    showQualSnatched = lambda x: Quality.splitQuality(x.quality)[1] and not x.archive_firstmatch
+
+    totalWanted = totalQual = totalQualSnatched = 0
+    backLogShows = sorted([x for x in sickbeard.showList if showCounts[x.indexerid][Overview.QUAL] + showCounts[x.indexerid][Overview.WANTED] + showCounts[x.indexerid][Overview.SNATCHED]], key=lambda x: x.name)
     for curShow in backLogShows:
         totalWanted += showCounts[curShow.indexerid][Overview.WANTED]
         totalQual += showCounts[curShow.indexerid][Overview.QUAL]
+        if showQualSnatched(curShow):
+            totalQualSnatched += showCounts[x.indexerid][Overview.SNATCHED]
 %>
 
 <div class="h2footer pull-right">
     <span class="listing-key wanted">Wanted: <b>${totalWanted}</b></span>
+    <span class="listing-key snatched">Snatched (Low Quality): <b>${totalQualSnatched}</b></span>
     <span class="listing-key qual">Low Quality: <b>${totalQual}</b></span>
 </div><br>
 
@@ -44,11 +48,17 @@ Jump to Show
 
 <table class="sickbeardTable" cellspacing="0" border="0" cellpadding="0">
 % for curShow in backLogShows:
+    % if not showQualSnatched(curShow) and not showCounts[curShow.indexerid][Overview.WANTED] + showCounts[curShow.indexerid][Overview.QUAL]:
+        <% continue %>
+    % endif
     <tr class="seasonheader" id="show-${curShow.indexerid}">
         <td colspan="3" class="align-left">
             <br><h2><a href="${srRoot}/home/displayShow?show=${curShow.indexerid}">${curShow.name}</a></h2>
             <div class="pull-right">
                 <span class="listing-key wanted">Wanted: <b>${showCounts[curShow.indexerid][Overview.WANTED]}</b></span>
+                % if showQualSnatched(curShow):
+                    <span class="listing-key snatched">Snatched (Low Quality): <b>${showCounts[curShow.indexerid][Overview.SNATCHED]}</b></span>
+                % endif
                 <span class="listing-key qual">Low Quality: <b>${showCounts[curShow.indexerid][Overview.QUAL]}</b></span>
                 <a class="btn btn-inline forceBacklog" href="${srRoot}/manage/backlogShow?indexer_id=${curShow.indexerid}"><i class="icon-play-circle icon-white"></i> Force Backlog</a>
             </div>
@@ -60,8 +70,12 @@ Jump to Show
     % for curResult in showSQLResults[curShow.indexerid]:
         <%
             whichStr = 'S%02dE%02d' % (curResult['season'], curResult['episode'])
-            if whichStr not in showCats[curShow.indexerid] or showCats[curShow.indexerid][whichStr] not in (Overview.QUAL, Overview.WANTED):
+            if whichStr not in showCats[curShow.indexerid] or showCats[curShow.indexerid][whichStr] not in (Overview.QUAL, Overview.WANTED, Overview.SNATCHED):
                 continue
+
+            if not showQualSnatched(curShow):
+                if showCats[curShow.indexerid][whichStr] == Overview.SNATCHED:
+                    continue
         %>
         <tr class="seasonstyle ${Overview.overviewStrings[showCats[curShow.indexerid][whichStr]]}">
             <td class="tableleft" align="center">${whichStr}</td>
diff --git a/gui/slick/views/manage_episodeStatuses.mako b/gui/slick/views/manage_episodeStatuses.mako
index 8bb6aa0d1d459cd6d1c15999498a98587b2fe28c..33d50a6275118a6b3652e9bfb154c9648f457f7b 100644
--- a/gui/slick/views/manage_episodeStatuses.mako
+++ b/gui/slick/views/manage_episodeStatuses.mako
@@ -31,26 +31,26 @@ Manage episodes with status <select name="whichStatus" class="form-control form-
     %endif
 % endfor
 </select>
-<input class="btn btn-inline" type="submit" value="Manage" />
+<input class="btn btn-inline" type="submit" value="Manage"  autocapitalize="off" />
 </form>
 
 % else:
 
 <form action="${srRoot}/manage/changeEpisodeStatuses" method="post">
-<input type="hidden" id="oldStatus" name="oldStatus" value="${whichStatus}" />
+<input type="hidden" id="oldStatus" name="oldStatus" value="${whichStatus}"  autocapitalize="off" />
 
 <h2>Shows containing ${common.statusStrings[whichStatus]} episodes</h2>
 
 <br>
 
 <%
-    if int(whichStatus) in [common.IGNORED, common.SNATCHED] + common.Quality.DOWNLOADED + common.Quality.ARCHIVED:
+    if int(whichStatus) in [common.IGNORED, common.SNATCHED, common.SNATCHED_PROPER, common.SNATCHED_BEST] + common.Quality.DOWNLOADED + common.Quality.ARCHIVED:
         row_class = "good"
     else:
         row_class = common.Overview.overviewStrings[int(whichStatus)]
 %>
 
-<input type="hidden" id="row_class" value="${row_class}" />
+<input type="hidden" id="row_class" value="${row_class}"  autocapitalize="off" />
 
 Set checked shows/episodes to <select name="newStatus" class="form-control form-control-inline input-sm">
 <%
@@ -71,7 +71,7 @@ Set checked shows/episodes to <select name="newStatus" class="form-control form-
 
 </select>
 
-<input class="btn btn-inline" type="submit" value="Go" />
+<input class="btn btn-inline" type="submit" value="Go"  autocapitalize="off" />
 
 <div>
     <button type="button" class="btn btn-xs selectAllShows">Select all</a></button>
@@ -82,8 +82,8 @@ Set checked shows/episodes to <select name="newStatus" class="form-control form-
 <table class="sickbeardTable manageTable" cellspacing="1" border="0" cellpadding="0">
     % for cur_indexer_id in sorted_show_ids:
     <tr id="${cur_indexer_id}">
-        <th><input type="checkbox" class="allCheck" id="allCheck-${cur_indexer_id}" name="${cur_indexer_id}-all" checked="checked" /></th>
-        <th colspan="2" style="width: 100%; text-align: left;"><a class="whitelink" href="${srRoot}/home/displayShow?show=${cur_indexer_id}">${show_names[cur_indexer_id]}</a> (${ep_counts[cur_indexer_id]}) <input type="button" class="pull-right get_more_eps btn" id="${cur_indexer_id}" value="Expand" /></th>
+        <th><input type="checkbox" class="allCheck" id="allCheck-${cur_indexer_id}" name="${cur_indexer_id}-all" checked="checked"  autocapitalize="off" /></th>
+        <th colspan="2" style="width: 100%; text-align: left;"><a class="whitelink" href="${srRoot}/home/displayShow?show=${cur_indexer_id}">${show_names[cur_indexer_id]}</a> (${ep_counts[cur_indexer_id]}) <input type="button" class="pull-right get_more_eps btn" id="${cur_indexer_id}" value="Expand"  autocapitalize="off" /></th>
     </tr>
     % endfor
     <tr><td style="padding:0;"></td><td style="padding:0;"></td><td style="padding:0;"></td></tr>
diff --git a/gui/slick/views/manage_failedDownloads.mako b/gui/slick/views/manage_failedDownloads.mako
index 920e04f8a3054b4f2b94905664d58b7079af0821..16f95ad3cbec7d688cd9ed4057d566d0ddd67024 100644
--- a/gui/slick/views/manage_failedDownloads.mako
+++ b/gui/slick/views/manage_failedDownloads.mako
@@ -32,7 +32,7 @@
       <th width="10%">Size</th>
       <th width="14%">Provider</th>
       <th width="1%">Remove<br>
-          <input type="checkbox" class="bulkCheck" id="removeCheck" />
+          <input type="checkbox" class="bulkCheck" id="removeCheck"  autocapitalize="off" />
       </th>
     </tr>
   </thead>
@@ -60,7 +60,7 @@
         <img src="${srRoot}/images/providers/missing.png" width="16" height="16" alt="missing provider" title="missing provider"/>
     % endif
     </td>
-    <td align="center"><input type="checkbox" class="removeCheck" id="remove-${hItem["release"]}" /></td>
+    <td align="center"><input type="checkbox" class="removeCheck" id="remove-${hItem["release"]}"  autocapitalize="off" /></td>
   </tr>
 % endfor
   </tbody>
diff --git a/gui/slick/views/manage_massEdit.mako b/gui/slick/views/manage_massEdit.mako
index 0892016a97e75f1e78b853719456eb3d2fefc9cf..3bc6cc31dd6ae8b9b7a8810c147e99f09b8e7533 100644
--- a/gui/slick/views/manage_massEdit.mako
+++ b/gui/slick/views/manage_massEdit.mako
@@ -26,7 +26,7 @@
 
     <div id="config-content">
         <form action="massEditSubmit" method="post">
-            <input type="hidden" name="toEdit" value="${showList}" />
+            <input type="hidden" name="toEdit" value="${showList}"  autocapitalize="off" />
 
             <div id="config-components">
                 <ul>
@@ -74,8 +74,8 @@
                                                 <td>
                                                     <a href="#" class="btn edit_root_dir" class="edit_root_dir" id="edit_root_dir_${cur_index}">Edit</a>
                                                     <a href="#" class="btn delete_root_dir" class="delete_root_dir" id="delete_root_dir_${cur_index}">Delete</a>
-                                                    <input type="hidden" name="orig_root_dir_${cur_index}" value="${cur_dir}" />
-                                                    <input type="text" style="display: none" name="new_root_dir_${cur_index}" id="new_root_dir_${cur_index}" class="new_root_dir" value="${cur_dir}" />
+                                                    <input type="hidden" name="orig_root_dir_${cur_index}" value="${cur_dir}"  autocapitalize="off" />
+                                                    <input type="text" style="display: none" name="new_root_dir_${cur_index}" id="new_root_dir_${cur_index}" class="new_root_dir" value="${cur_dir}"  autocapitalize="off" />
                                                 </td>
                                             </tr>
                                         % endfor
diff --git a/gui/slick/views/manage_subtitleMissed.mako b/gui/slick/views/manage_subtitleMissed.mako
index d488199aa6787ab8213e2a97c0c81c04ddfa9278..420a4247348da9427eede746d43c079d550a6474 100644
--- a/gui/slick/views/manage_subtitleMissed.mako
+++ b/gui/slick/views/manage_subtitleMissed.mako
@@ -31,16 +31,16 @@ Manage episodes without <select name="whichSubs" class="form-control form-contro
 % endfor
 </select>
 subtitles
-<input class="btn" type="submit" value="Manage" />
+<input class="btn" type="submit" value="Manage"  autocapitalize="off" />
 </form>
 
 % else:
-<input type="hidden" id="selectSubLang" name="selectSubLang" value="${whichSubs}" />
+<input type="hidden" id="selectSubLang" name="selectSubLang" value="${whichSubs}"  autocapitalize="off" />
 
 <form action="${srRoot}/manage/downloadSubtitleMissed" method="post">
 <h2>Episodes without ${subsLanguage} subtitles.</h2>
 <br>
-Download missed subtitles for selected episodes <input class="btn btn-inline" type="submit" value="Go" />
+Download missed subtitles for selected episodes <input class="btn btn-inline" type="submit" value="Go"  autocapitalize="off" />
 <div>
     <button type="button" class="btn btn-xs selectAllShows">Select all</a></button>
     <button type="button" class="btn btn-xs unselectAllShows">Clear all</a></button>
@@ -49,8 +49,8 @@ Download missed subtitles for selected episodes <input class="btn btn-inline" ty
 <table class="sickbeardTable manageTable" cellspacing="1" border="0" cellpadding="0">
 % for cur_indexer_id in sorted_show_ids:
  <tr id="${cur_indexer_id}">
-  <th><input type="checkbox" class="allCheck" id="allCheck-${cur_indexer_id}" name="${cur_indexer_id}-all"checked="checked" /></th>
-  <th colspan="3" style="width: 100%; text-align: left;"><a class="whitelink" href="${srRoot}/home/displayShow?show=${cur_indexer_id}">${show_names[cur_indexer_id]}</a> (${ep_counts[cur_indexer_id]}) <input type="button" class="pull-right get_more_eps btn" id="${cur_indexer_id}" value="Expand" /></th>
+  <th><input type="checkbox" class="allCheck" id="allCheck-${cur_indexer_id}" name="${cur_indexer_id}-all"checked="checked"  autocapitalize="off" /></th>
+  <th colspan="3" style="width: 100%; text-align: left;"><a class="whitelink" href="${srRoot}/home/displayShow?show=${cur_indexer_id}">${show_names[cur_indexer_id]}</a> (${ep_counts[cur_indexer_id]}) <input type="button" class="pull-right get_more_eps btn" id="${cur_indexer_id}" value="Expand"  autocapitalize="off" /></th>
  </tr>
 % endfor
 </table>
diff --git a/gui/slick/views/schedule.mako b/gui/slick/views/schedule.mako
index ff76a17c3b8ca220b86e46a71de968345f04a844..32e88b1fe1ce15f96cc1060c91ae407ffddbc8d7 100644
--- a/gui/slick/views/schedule.mako
+++ b/gui/slick/views/schedule.mako
@@ -70,7 +70,7 @@
 <!-- start list view //-->
 <% show_div = 'listing-default' %>
 
-<input type="hidden" id="srRoot" value="${srRoot}" />
+<input type="hidden" id="srRoot" value="${srRoot}"  autocapitalize="off" />
 
 <table id="showListTable" class="sickbeardTable tablesorter seasonstyle" cellspacing="1" border="0" cellpadding="0">
 
@@ -355,7 +355,7 @@
 <br>
 <br>
 <div class="calendarWrapper">
-<input type="hidden" id="srRoot" value="${srRoot}" />
+<input type="hidden" id="srRoot" value="${srRoot}"  autocapitalize="off" />
     % for day in dates:
     <% tbl_day += 1 %>
         <table class="sickbeardTable tablesorter calendarTable ${'cal-%s' % (('even', 'odd')[bool(tbl_day % 2)])}" cellspacing="0" border="0" cellpadding="0">
diff --git a/gui/slick/views/testRename.mako b/gui/slick/views/testRename.mako
index fb43c9d7739fca6e2f1b7ed003f864c79750af99..71c09bd98ed66921aed0ce786c21fc64f458f2a6 100644
--- a/gui/slick/views/testRename.mako
+++ b/gui/slick/views/testRename.mako
@@ -18,7 +18,7 @@
     <h1 class="title">${title}</h1>
 % endif
 
-<input type="hidden" id="showID" value="${show.indexerid}" />
+<input type="hidden" id="showID" value="${show.indexerid}"  autocapitalize="off" />
 
 <h3>Preview of the proposed name changes</h3>
 <blockquote>
@@ -42,7 +42,7 @@
             </td>
         </tr>
         <tr class="seasoncols" id="selectall">
-            <th class="col-checkbox"><input type="checkbox" class="seriesCheck" id="SelectAll" /></th>
+            <th class="col-checkbox"><input type="checkbox" class="seriesCheck" id="SelectAll"  autocapitalize="off" /></th>
             <th align="left" valign="top" class="nowrap">Select All</th>
             <th width="100%" class="col-name" style="visibility:hidden;"></th>
         </tr>
@@ -69,7 +69,7 @@
             </td>
         </tr>
         <tr class="seasoncols" id="season-${cur_ep_obj.season}-cols">
-            <th class="col-checkbox"><input type="checkbox" class="seasonCheck" id="${cur_ep_obj.season}" /></th>
+            <th class="col-checkbox"><input type="checkbox" class="seasonCheck" id="${cur_ep_obj.season}"  autocapitalize="off" /></th>
             <th class="nowrap">Episode</th>
             <th class="col-name">Old Location</th>
             <th class="col-name">New Location</th>
@@ -88,7 +88,7 @@ if len(epList) > 1:
         <tr class="season-${curSeason} ${('wanted', 'good')[curLoc == newLoc]} seasonstyle">
             <td class="col-checkbox">
             % if curLoc != newLoc:
-                <input type="checkbox" class="epCheck" id="${str(cur_ep_obj.season) + 'x' + str(cur_ep_obj.episode)}" name="${str(cur_ep_obj.season) + "x" + str(cur_ep_obj.episode)}" />
+                <input type="checkbox" class="epCheck" id="${str(cur_ep_obj.season) + 'x' + str(cur_ep_obj.episode)}" name="${str(cur_ep_obj.season) + "x" + str(cur_ep_obj.episode)}"  autocapitalize="off" />
             % endif
             </td>
             <td align="center" valign="top" class="nowrap">${"-".join(map(str, epList))}</td>
diff --git a/gui/slick/views/viewlogs.mako b/gui/slick/views/viewlogs.mako
index 73e7200c149333126a653410ef38d3306ff1ac0e..a82b7aa243f8dc366b1750c7988fa07f46110166 100644
--- a/gui/slick/views/viewlogs.mako
+++ b/gui/slick/views/viewlogs.mako
@@ -37,7 +37,7 @@ Filter log by: <select name="logFilter" id="logFilter" class="form-control form-
 % endfor
 </select>
 Search log by:
-<input type="text" name="logSearch" placeholder="clear to reset" id="logSearch" value="${('', logSearch)[bool(logSearch)]}" class="form-control form-control-inline input-sm" />
+<input type="text" name="logSearch" placeholder="clear to reset" id="logSearch" value="${('', logSearch)[bool(logSearch)]}" class="form-control form-control-inline input-sm"  autocapitalize="off" />
 </div>
 <br>
 <div class="align-left"><pre>
diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index 0ddd3a8a710040211449176321a59bc7fbd19229..4079965bb78696d3e66592d570f0e4e89ccf99bd 100644
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -521,6 +521,7 @@ SUBTITLES_HEARING_IMPAIRED = False
 SUBTITLES_FINDER_FREQUENCY = 1
 SUBTITLES_MULTI = False
 SUBTITLES_EXTRA_SCRIPTS = []
+SUBTITLES_DOWNLOAD_IN_PP = False
 
 ADDIC7ED_USER = None
 ADDIC7ED_PASS = None
@@ -608,7 +609,7 @@ def initialize(consoleLogging=True):
             GUI_NAME, HOME_LAYOUT, HISTORY_LAYOUT, DISPLAY_SHOW_SPECIALS, COMING_EPS_LAYOUT, COMING_EPS_SORT, COMING_EPS_DISPLAY_PAUSED, COMING_EPS_MISSED_RANGE, FUZZY_DATING, TRIM_ZERO, DATE_PRESET, TIME_PRESET, TIME_PRESET_W_SECONDS, THEME_NAME, \
             POSTER_SORTBY, POSTER_SORTDIR, HISTORY_LIMIT, CREATE_MISSING_SHOW_DIRS, ADD_SHOWS_WO_DIR, \
             METADATA_WDTV, METADATA_TIVO, METADATA_MEDE8ER, IGNORE_WORDS, TRACKERS_LIST, IGNORED_SUBS_LIST, REQUIRE_WORDS, CALENDAR_UNPROTECTED, CALENDAR_ICONS, NO_RESTART, \
-            USE_SUBTITLES, SUBTITLES_LANGUAGES, SUBTITLES_DIR, SUBTITLES_SERVICES_LIST, SUBTITLES_SERVICES_ENABLED, SUBTITLES_HISTORY, SUBTITLES_FINDER_FREQUENCY, SUBTITLES_MULTI, EMBEDDED_SUBTITLES_ALL, SUBTITLES_EXTRA_SCRIPTS, subtitlesFinderScheduler, \
+            USE_SUBTITLES, SUBTITLES_LANGUAGES, SUBTITLES_DIR, SUBTITLES_SERVICES_LIST, SUBTITLES_SERVICES_ENABLED, SUBTITLES_HISTORY, SUBTITLES_FINDER_FREQUENCY, SUBTITLES_MULTI, SUBTITLES_DOWNLOAD_IN_PP, EMBEDDED_SUBTITLES_ALL, SUBTITLES_EXTRA_SCRIPTS, subtitlesFinderScheduler, \
             SUBTITLES_HEARING_IMPAIRED, ADDIC7ED_USER, ADDIC7ED_PASS, LEGENDASTV_USER, LEGENDASTV_PASS, OPENSUBTITLES_USER, OPENSUBTITLES_PASS, \
             USE_FAILED_DOWNLOADS, DELETE_FAILED, ANON_REDIRECT, LOCALHOST_IP, DEBUG, DEFAULT_PAGE, PROXY_SETTING, PROXY_INDEXERS, \
             AUTOPOSTPROCESSER_FREQUENCY, SHOWUPDATE_HOUR, \
@@ -1146,7 +1147,7 @@ def initialize(consoleLogging=True):
         SUBTITLES_HEARING_IMPAIRED = bool(check_setting_int(CFG, 'Subtitles', 'subtitles_hearing_impaired', 0))
         SUBTITLES_FINDER_FREQUENCY = check_setting_int(CFG, 'Subtitles', 'subtitles_finder_frequency', 1)
         SUBTITLES_MULTI = bool(check_setting_int(CFG, 'Subtitles', 'subtitles_multi', 1))
-
+        SUBTITLES_DOWNLOAD_IN_PP = bool(check_setting_int(CFG, 'Subtitles', 'subtitles_download_in_pp', 0))
         SUBTITLES_EXTRA_SCRIPTS = [x.strip() for x in check_setting_str(CFG, 'Subtitles', 'subtitles_extra_scripts', '').split('|') if x.strip()]
 
         ADDIC7ED_USER = check_setting_str(CFG, 'Subtitles', 'addic7ed_username', '', censor_log=True)
@@ -2146,7 +2147,7 @@ def save_config():
     new_config['Subtitles']['subtitles_finder_frequency'] = int(SUBTITLES_FINDER_FREQUENCY)
     new_config['Subtitles']['subtitles_multi'] = int(SUBTITLES_MULTI)
     new_config['Subtitles']['subtitles_extra_scripts'] = '|'.join(SUBTITLES_EXTRA_SCRIPTS)
-
+    new_config['Subtitles']['subtitles_download_in_pp'] = int(SUBTITLES_DOWNLOAD_IN_PP)
     new_config['Subtitles']['addic7ed_username'] = ADDIC7ED_USER
     new_config['Subtitles']['addic7ed_password'] = helpers.encrypt(ADDIC7ED_PASS, ENCRYPTION_VERSION)
 
diff --git a/sickbeard/common.py b/sickbeard/common.py
index a23afacfe6f39bf424f9e473c0ab1082204450ee..bbc240b237cd36023f2339ab3e76a6bdd09700f6 100644
--- a/sickbeard/common.py
+++ b/sickbeard/common.py
@@ -22,10 +22,9 @@ import operator
 import platform
 import re
 import uuid
-from numdict import NumDict
+from sickbeard.numdict import NumDict
 
 import sys
-import os.path
 
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
@@ -406,7 +405,7 @@ class Quality(object):
         return (status, Quality.NONE)
 
     @staticmethod
-    def sceneQualityFromName(name, quality):
+    def sceneQualityFromName(name, quality): # pylint: disable=R0912
         """
         Get scene naming parameters from filename and quality
 
@@ -548,42 +547,49 @@ class StatusStrings(NumDict):
             return False
 
 # Assign strings to statuses
-statusStrings = StatusStrings(
-    {UNKNOWN: "Unknown",
-     UNAIRED: "Unaired",
-     SNATCHED: "Snatched",
-     DOWNLOADED: "Downloaded",
-     SKIPPED: "Skipped",
-     SNATCHED_PROPER: "Snatched (Proper)",
-     WANTED: "Wanted",
-     ARCHIVED: "Archived",
-     IGNORED: "Ignored",
-     SUBTITLED: "Subtitled",
-     FAILED: "Failed",
-     SNATCHED_BEST: "Snatched (Best)"
-     }
-)
+statusStrings = StatusStrings({
+    UNKNOWN: "Unknown",
+    UNAIRED: "Unaired",
+    SNATCHED: "Snatched",
+    DOWNLOADED: "Downloaded",
+    SKIPPED: "Skipped",
+    SNATCHED_PROPER: "Snatched (Proper)",
+    WANTED: "Wanted",
+    ARCHIVED: "Archived",
+    IGNORED: "Ignored",
+    SUBTITLED: "Subtitled",
+    FAILED: "Failed",
+    SNATCHED_BEST: "Snatched (Best)"
+})
 
 
 # pylint: disable=R0903
 class Overview(object):
     UNAIRED = UNAIRED  # 1
-    QUAL = 2
+    SNATCHED = SNATCHED # 2
     WANTED = WANTED  # 3
-    GOOD = 4
+    GOOD = DOWNLOADED # 4
     SKIPPED = SKIPPED  # 5
-
-    # For both snatched statuses. Note: SNATCHED/QUAL have same value and break dict.
-    SNATCHED = SNATCHED_PROPER = SNATCHED_BEST  # 9
-
-    overviewStrings = {SKIPPED: "skipped",
-                       WANTED: "wanted",
-                       QUAL: "qual",
-                       GOOD: "good",
-                       UNAIRED: "unaired",
-                       SNATCHED: "snatched"}
-
-countryList = {'Australia': 'AU',
-               'Canada': 'CA',
-               'USA': 'US'
-               }
+    SNATCHED_PROPER = SNATCHED_PROPER  # 9
+    SNATCHED_BEST = SNATCHED_BEST # 12
+
+    # Should suffice!
+    QUAL = 50
+
+    overviewStrings = {
+        SKIPPED: "skipped",
+        WANTED: "wanted",
+        QUAL: "qual",
+        GOOD: "good",
+        UNAIRED: "unaired",
+        SNATCHED: "snatched",
+        # we can give these a different class later, otherwise breaks checkboxes in displayshow for showing different statuses
+        SNATCHED_BEST: "snatched",
+        SNATCHED_PROPER: "snatched"
+    }
+
+countryList = {
+    'Australia': 'AU',
+    'Canada': 'CA',
+    'USA': 'US'
+}
diff --git a/sickbeard/config.py b/sickbeard/config.py
index f6766920a604dbeb0782f927e802cd8c4896fc7f..670835e10682f47eb762dc66d286d3941e2769b6 100644
--- a/sickbeard/config.py
+++ b/sickbeard/config.py
@@ -203,6 +203,7 @@ def change_AUTOPOSTPROCESSER_FREQUENCY(freq):
 
     sickbeard.autoPostProcesserScheduler.cycleTime = datetime.timedelta(minutes=sickbeard.AUTOPOSTPROCESSER_FREQUENCY)
 
+
 def change_DAILYSEARCH_FREQUENCY(freq):
     """
     Change frequency of daily search thread
@@ -216,6 +217,7 @@ def change_DAILYSEARCH_FREQUENCY(freq):
 
     sickbeard.dailySearchScheduler.cycleTime = datetime.timedelta(minutes=sickbeard.DAILYSEARCH_FREQUENCY)
 
+
 def change_BACKLOG_FREQUENCY(freq):
     """
     Change frequency of backlog thread
@@ -230,6 +232,7 @@ def change_BACKLOG_FREQUENCY(freq):
 
     sickbeard.backlogSearchScheduler.cycleTime = datetime.timedelta(minutes=sickbeard.BACKLOG_FREQUENCY)
 
+
 def change_UPDATE_FREQUENCY(freq):
     """
     Change frequency of daily updater thread
@@ -243,6 +246,7 @@ def change_UPDATE_FREQUENCY(freq):
 
     sickbeard.versionCheckScheduler.cycleTime = datetime.timedelta(hours=sickbeard.UPDATE_FREQUENCY)
 
+
 def change_SHOWUPDATE_HOUR(freq):
     """
     Change frequency of show updater thread
@@ -258,6 +262,7 @@ def change_SHOWUPDATE_HOUR(freq):
 
     sickbeard.showUpdateScheduler.start_time = datetime.time(hour=sickbeard.SHOWUPDATE_HOUR)
 
+
 def change_SUBTITLES_FINDER_FREQUENCY(subtitles_finder_frequency):
     """
     Change frequency of subtitle thread
@@ -269,6 +274,7 @@ def change_SUBTITLES_FINDER_FREQUENCY(subtitles_finder_frequency):
 
     sickbeard.SUBTITLES_FINDER_FREQUENCY = to_int(subtitles_finder_frequency, 1)
 
+
 def change_VERSION_NOTIFY(version_notify):
     """
     Change frequency of versioncheck thread
@@ -285,6 +291,7 @@ def change_VERSION_NOTIFY(version_notify):
     if oldSetting is False and version_notify is True:
         sickbeard.versionCheckScheduler.forceRun()
 
+
 def change_DOWNLOAD_PROPERS(download_propers):
     """
     Enable/Disable proper download thread
@@ -310,6 +317,7 @@ def change_DOWNLOAD_PROPERS(download_propers):
         sickbeard.traktCheckerScheduler.silent = True
         logger.log(u"Stopping PROPERFINDER thread", logger.INFO)
 
+
 def change_USE_TRAKT(use_trakt):
     """
     Enable/disable trakt thread
@@ -361,6 +369,7 @@ def change_USE_SUBTITLES(use_subtitles):
         sickbeard.subtitlesFinderScheduler.silent = True
         logger.log(u"Stopping SUBTITLESFINDER thread", logger.INFO)
 
+
 def change_PROCESS_AUTOMATICALLY(process_automatically):
     """
     Enable/Disable postprocessor thread
@@ -386,6 +395,7 @@ def change_PROCESS_AUTOMATICALLY(process_automatically):
         sickbeard.autoPostProcesserScheduler.enable = False
         sickbeard.autoPostProcesserScheduler.silent = True
 
+
 def CheckSection(CFG, sec):
     """ Check if INI section exists, if not create it """
 
@@ -603,6 +613,7 @@ def check_setting_str(config, cfg_name, item_name, def_val, silent=True, censor_
 
     return my_val
 
+
 class ConfigMigrator():
     def __init__(self, config_obj):
         """
diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index c3a77d1906dae914984d8b7f37cbffe5147cd598..9e78f997a4578437779ac68dd97fede5d962ecfc 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -18,7 +18,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-
 import os
 import io
 import ctypes
@@ -54,12 +53,11 @@ from sickbeard.common import USER_AGENT
 from sickbeard import db
 from sickbeard.notifiers.synoindex import notifier as synoindex_notifier
 from sickbeard import clients
-from sickbeard.subtitles import isValidLanguage
-from sickrage.helper.common import media_extensions, subtitle_extensions
+from sickrage.helper.common import media_extensions, pretty_file_size, subtitle_extensions
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex, MultipleShowObjectsException
 from cachecontrol import CacheControl, caches
-
+from babelfish import Language
 from itertools import izip, cycle
 
 import shutil
@@ -72,6 +70,14 @@ shutil.copyfile = shutil_custom.copyfile_custom
 urllib._urlopener = classes.SickBeardURLopener()
 
 
+def isValidLanguage(language):
+    try:
+        Language.fromopensubtitles(language)
+    except Exception:
+        return False
+    return True
+
+
 def fixGlob(path):
     path = re.sub(r'\[', '[[]', path)
     return re.sub(r'(?<!\[)\]', '[]]', path)
@@ -95,21 +101,6 @@ def indentXML(elem, level=0):
         if level and (not elem.tail or not elem.tail.strip()):
             elem.tail = i
 
-
-def remove_extension(name):
-    """
-    Remove download or media extension from name (if any)
-    """
-
-    if name and "." in name:
-        # pylint: disable=W0612
-        base_name, sep, extension = name.rpartition('.')  # @UnusedVariable
-        if base_name and extension.lower() in ['nzb', 'torrent'] + media_extensions:
-            name = base_name
-
-    return name
-
-
 def remove_non_release_groups(name):
     """
     Remove non release groups from name
@@ -170,54 +161,6 @@ def remove_non_release_groups(name):
     return _name
 
 
-def replaceExtension(filename, newExt):
-    """
-    >>> replaceExtension('foo.avi', 'mkv')
-    'foo.mkv'
-    >>> replaceExtension('.vimrc', 'arglebargle')
-    '.vimrc'
-    >>> replaceExtension('a.b.c', 'd')
-    'a.b.d'
-    >>> replaceExtension('', 'a')
-    ''
-    >>> replaceExtension('foo.bar', '')
-    'foo.'
-    """
-    sepFile = filename.rpartition(".")
-    if sepFile[0] == "":
-        return filename
-    else:
-        return sepFile[0] + "." + newExt
-
-
-def notTorNZBFile(filename):
-    """
-    Returns true if filename is not a NZB nor Torrent file
-
-    :param filename: Filename to check
-    :return: True if filename is not a NZB nor Torrent
-    """
-
-    return not (filename.endswith(".torrent") or filename.endswith(".nzb"))
-
-
-def isSyncFile(filename):
-    """
-    Returns true if filename is a syncfile, indicating filesystem may be in flux
-
-    :param filename: Filename to check
-    :return: True if this file is a syncfile, False otherwise
-    """
-
-    extension = filename.rpartition(".")[2].lower()
-    # if extension == '!sync' or extension == 'lftp-pget-status' or extension == 'part' or extension == 'bts':
-    syncfiles = sickbeard.SYNC_FILES
-    if extension in syncfiles.split(",") or filename.startswith('.syncthing'):
-        return True
-    else:
-        return False
-
-
 def isMediaFile(filename):
     """
     Check if named file may contain media
@@ -281,29 +224,6 @@ def isBeingWritten(filepath):
     return False
 
 
-def sanitizeFileName(name):
-    """
-    >>> sanitizeFileName('a/b/c')
-    'a-b-c'
-    >>> sanitizeFileName('abc')
-    'abc'
-    >>> sanitizeFileName('a"b')
-    'ab'
-    >>> sanitizeFileName('.a.b..')
-    'a.b'
-    """
-
-    # remove bad chars from the filename
-    name = re.sub(r'[\\/\*]', '-', name)
-    name = re.sub(r'[:"<>|?]', '', name)
-    name = re.sub(ur'\u2122', '', name)  # Trade Mark Sign
-
-    # remove leading/trailing periods and spaces
-    name = name.strip(' .')
-
-    return name
-
-
 def remove_file_failed(failed_file):
     """
     Remove file from filesystem
@@ -1750,18 +1670,6 @@ def generateApiKey():
     return m.hexdigest()
 
 
-def pretty_filesize(file_bytes):
-    """Return humanly formatted sizes from bytes"""
-    for mod in ['B', 'KB', 'MB', 'GB', 'TB', 'PB']:
-        if file_bytes < 1024.00:
-            return "%3.2f %s" % (file_bytes, mod)
-        file_bytes /= 1024.00
-
-if __name__ == '__main__':
-    import doctest
-    doctest.testmod()
-
-
 def remove_article(text=''):
     """Remove the english articles from a text string"""
 
@@ -1834,7 +1742,7 @@ def verify_freespace(src, dest, oldfile=None):
         return True
     else:
         logger.log(u"Not enough free space: Needed: %s bytes ( %s ), found: %s bytes ( %s )"
-                   % (neededspace, pretty_filesize(neededspace), diskfree, pretty_filesize(diskfree)), logger.WARNING)
+                   % (neededspace, pretty_file_size(neededspace), diskfree, pretty_file_size(diskfree)), logger.WARNING)
         return False
 
 
@@ -1905,9 +1813,9 @@ def getDiskSpaceUsage(diskPath=None):
         if platform.system() == 'Windows':
             free_bytes = ctypes.c_ulonglong(0)
             ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(diskPath), None, None, ctypes.pointer(free_bytes))
-            return pretty_filesize(free_bytes.value)
+            return pretty_file_size(free_bytes.value)
         else:
             st = os.statvfs(diskPath)
-            return pretty_filesize(st.f_bavail * st.f_frsize)
+            return pretty_file_size(st.f_bavail * st.f_frsize)
     else:
         return False
diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py
index 5e570fd8f4fe237b4f0185fd8fbe118a3b8d2eba..0a2cc1a414d709ff6f160523906b579d6bebcd42 100644
--- a/sickbeard/metadata/generic.py
+++ b/sickbeard/metadata/generic.py
@@ -18,7 +18,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-
 import os
 import io
 import re
@@ -34,6 +33,7 @@ from sickbeard import helpers
 from sickbeard import logger
 from sickbeard.metadata import helpers as metadata_helpers
 from sickbeard.show_name_helpers import allPossibleShowNames
+from sickrage.helper.common import replace_extension
 from sickrage.helper.exceptions import ex
 
 from tmdb_api.tmdb_api import TMDB
@@ -157,7 +157,7 @@ class GenericMetadata(object):
         return os.path.join(show_obj.location, self._show_metadata_filename)
 
     def get_episode_file_path(self, ep_obj):
-        return helpers.replaceExtension(ep_obj.location, self._ep_nfo_extension)
+        return replace_extension(ep_obj.location, self._ep_nfo_extension)
 
     def get_fanart_path(self, show_obj):
         return os.path.join(show_obj.location, self.fanart_name)
diff --git a/sickbeard/metadata/kodi.py b/sickbeard/metadata/kodi.py
index b093e82729b79f5a094b76caa7e1795157a1f0d4..b7445073ee1d7389bfb5641e52336c05c51112f8 100644
--- a/sickbeard/metadata/kodi.py
+++ b/sickbeard/metadata/kodi.py
@@ -22,7 +22,7 @@ import os
 
 from sickbeard.metadata import generic
 from sickbeard.metadata import kodi_12plus
-from sickbeard import helpers
+from sickrage.helper.common import replace_extension
 from sickrage.helper.encoding import ek
 
 
@@ -100,7 +100,7 @@ class KODIMetadata(kodi_12plus.KODI_12PlusMetadata):
         ep_obj: a TVEpisode instance for which to create the thumbnail
         """
         if ek(os.path.isfile, ep_obj.location):
-            tbn_filename = helpers.replaceExtension(ep_obj.location, 'tbn')
+            tbn_filename = replace_extension(ep_obj.location, 'tbn')
         else:
             return None
 
diff --git a/sickbeard/metadata/kodi_12plus.py b/sickbeard/metadata/kodi_12plus.py
index 4014b8144db2c3432538c278e686f0a318807635..2b1eda1500957a013d68517727595a8ad3903683 100644
--- a/sickbeard/metadata/kodi_12plus.py
+++ b/sickbeard/metadata/kodi_12plus.py
@@ -17,7 +17,9 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+import re
 import datetime
+from babelfish import Country
 
 import sickbeard
 from sickbeard.metadata import generic
@@ -74,22 +76,26 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
                                          season_all_poster,
                                          season_all_banner)
 
-        self.name = 'KODI 12+'
+        self.name = u'KODI 12+'
 
-        self.poster_name = "poster.jpg"
-        self.season_all_poster_name = "season-all-poster.jpg"
+        self.poster_name = u"poster.jpg"
+        self.season_all_poster_name = u"season-all-poster.jpg"
 
         # web-ui metadata template
-        self.eg_show_metadata = "tvshow.nfo"
-        self.eg_episode_metadata = "Season##\\<i>filename</i>.nfo"
-        self.eg_fanart = "fanart.jpg"
-        self.eg_poster = "poster.jpg"
-        self.eg_banner = "banner.jpg"
-        self.eg_episode_thumbnails = "Season##\\<i>filename</i>-thumb.jpg"
-        self.eg_season_posters = "season##-poster.jpg"
-        self.eg_season_banners = "season##-banner.jpg"
-        self.eg_season_all_poster = "season-all-poster.jpg"
-        self.eg_season_all_banner = "season-all-banner.jpg"
+        self.eg_show_metadata = u"tvshow.nfo"
+        self.eg_episode_metadata = u"Season##\\<i>filename</i>.nfo"
+        self.eg_fanart = u"fanart.jpg"
+        self.eg_poster = u"poster.jpg"
+        self.eg_banner = u"banner.jpg"
+        self.eg_episode_thumbnails = u"Season##\\<i>filename</i>-thumb.jpg"
+        self.eg_season_posters = u"season##-poster.jpg"
+        self.eg_season_banners = u"season##-banner.jpg"
+        self.eg_season_all_poster = u"season-all-poster.jpg"
+        self.eg_season_all_banner = u"season-all-banner.jpg"
+
+    @staticmethod
+    def _split_info(info_string):
+        return {x.strip().title() for x in re.sub(r'[,/]+', '|', info_string).split('|') if x.strip()}
 
     def _show_data(self, show_obj):
         """
@@ -169,8 +175,19 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
             indexerid.text = str(myShow["id"])
 
         if getattr(myShow, 'genre', None) and isinstance(myShow["genre"], basestring):
-            genre = etree.SubElement(tv_node, "genre")
-            genre.text = " / ".join(x.strip() for x in myShow["genre"].split('|') if x.strip())
+            for genre in self._split_info(myShow["genre"]):
+                cur_genre = etree.SubElement(tv_node, "genre")
+                cur_genre.text = genre
+
+        if 'country_codes' in show_obj.imdb_info:
+            for country in self._split_info(show_obj.imdb_info['country_codes']):
+                try:
+                    cur_country_name = Country(country.upper()).name.title()
+                except Exception:
+                    continue
+
+                cur_country = etree.SubElement(tv_node, "country")
+                cur_country.text = cur_country_name
 
         if getattr(myShow, 'firstaired', None):
             premiered = etree.SubElement(tv_node, "premiered")
@@ -180,6 +197,16 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
             studio = etree.SubElement(tv_node, "studio")
             studio.text = myShow["network"].strip()
 
+        if getattr(myShow, 'writer', None) and isinstance(myShow['writer'], basestring):
+            for writer in self._split_info(myShow['writer']):
+                cur_writer = etree.SubElement(tv_node, "credits")
+                cur_writer.text = writer
+
+        if getattr(myShow, 'director', None) and isinstance(myShow['director'], basestring):
+            for director in self._split_info(myShow['director']):
+                cur_director = etree.SubElement(tv_node, "director")
+                cur_director.text = director
+
         if getattr(myShow, '_actors', None):
             for actor in myShow['_actors']:
                 cur_actor = etree.SubElement(tv_node, "actor")
@@ -310,20 +337,23 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
             # watched = etree.SubElement(episode, "watched")
             # watched.text = 'false'
 
-            if getattr(myEp, 'writer', None):
-                ep_credits = etree.SubElement(episode, "credits")
-                ep_credits.text = myEp['writer'].strip()
-
-            if getattr(myEp, 'director', None):
-                director = etree.SubElement(episode, "director")
-                director.text = myEp['director'].strip()
-
             if getattr(myEp, 'rating', None):
                 rating = etree.SubElement(episode, "rating")
                 rating.text = myEp['rating']
 
+
+            if getattr(myEp, 'writer', None) and isinstance(myEp['writer'], basestring):
+                for writer in self._split_info(myEp['writer']):
+                    cur_writer = etree.SubElement(episode, "credits")
+                    cur_writer.text = writer
+
+            if getattr(myEp, 'director', None) and isinstance(myEp['director'], basestring):
+                for director in self._split_info(myEp['director']):
+                    cur_director = etree.SubElement(episode, "director")
+                    cur_director.text = director
+
             if getattr(myEp, 'gueststars', None) and isinstance(myEp['gueststars'], basestring):
-                for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()):
+                for actor in self._split_info(myEp['gueststars']):
                     cur_actor = etree.SubElement(episode, "actor")
                     cur_actor_name = etree.SubElement(cur_actor, "name")
                     cur_actor_name.text = actor
diff --git a/sickbeard/metadata/mede8er.py b/sickbeard/metadata/mede8er.py
index 654465e11d23753794f4f46abbd23e033ec6a904..f24e5f14c8cca9b570b043a63abab6b94692ae14 100644
--- a/sickbeard/metadata/mede8er.py
+++ b/sickbeard/metadata/mede8er.py
@@ -26,7 +26,7 @@ import sickbeard
 from sickbeard import logger, helpers
 from sickbeard.metadata import mediabrowser
 
-from sickrage.helper.common import dateFormat
+from sickrage.helper.common import dateFormat, replace_extension
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex, ShowNotFoundException
 
@@ -86,11 +86,11 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata):
         # self.eg_season_all_banner = "<i>not supported</i>"
 
     def get_episode_file_path(self, ep_obj):
-        return helpers.replaceExtension(ep_obj.location, self._ep_nfo_extension)
+        return replace_extension(ep_obj.location, self._ep_nfo_extension)
 
     @staticmethod
     def get_episode_thumb_path(ep_obj):
-        return helpers.replaceExtension(ep_obj.location, 'jpg')
+        return replace_extension(ep_obj.location, 'jpg')
 
     def _show_data(self, show_obj):
         """
diff --git a/sickbeard/metadata/mediabrowser.py b/sickbeard/metadata/mediabrowser.py
index e4319528190a4a2466dc19be684ea0cf6b5acc6c..a917a4b47aa3354d0438e35710f72e89aa7de445 100644
--- a/sickbeard/metadata/mediabrowser.py
+++ b/sickbeard/metadata/mediabrowser.py
@@ -28,7 +28,7 @@ from sickbeard.metadata import generic
 
 from sickbeard import logger, helpers
 
-from sickrage.helper.common import dateFormat
+from sickrage.helper.common import dateFormat, replace_extension
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex, ShowNotFoundException
 
@@ -117,7 +117,7 @@ class MediaBrowserMetadata(generic.GenericMetadata):
         """
 
         if ek(os.path.isfile, ep_obj.location):
-            xml_file_name = helpers.replaceExtension(ek(os.path.basename, ep_obj.location), self._ep_nfo_extension)
+            xml_file_name = replace_extension(ek(os.path.basename, ep_obj.location), self._ep_nfo_extension)
             metadata_dir_name = ek(os.path.join, ek(os.path.dirname, ep_obj.location), 'metadata')
             xml_file_path = ek(os.path.join, metadata_dir_name, xml_file_name)
         else:
@@ -136,7 +136,7 @@ class MediaBrowserMetadata(generic.GenericMetadata):
         """
 
         if ek(os.path.isfile, ep_obj.location):
-            tbn_file_name = helpers.replaceExtension(ek(os.path.basename, ep_obj.location), 'jpg')
+            tbn_file_name = replace_extension(ek(os.path.basename, ep_obj.location), 'jpg')
             metadata_dir_name = ek(os.path.join, ek(os.path.dirname, ep_obj.location), 'metadata')
             tbn_file_path = ek(os.path.join, metadata_dir_name, tbn_file_name)
         else:
diff --git a/sickbeard/metadata/wdtv.py b/sickbeard/metadata/wdtv.py
index 03310c80cecf56ca953ca43e0e6a75878cd3e32a..34c9cb539ab1d263eba6a890a92a11784bc5d9cc 100644
--- a/sickbeard/metadata/wdtv.py
+++ b/sickbeard/metadata/wdtv.py
@@ -27,7 +27,7 @@ import sickbeard
 from sickbeard.metadata import generic
 
 from sickbeard import logger, helpers
-from sickrage.helper.common import dateFormat
+from sickrage.helper.common import dateFormat, replace_extension
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex, ShowNotFoundException
 
@@ -130,7 +130,7 @@ class WDTVMetadata(generic.GenericMetadata):
         ep_obj: a TVEpisode instance for which to create the thumbnail
         """
         if ek(os.path.isfile, ep_obj.location):
-            tbn_filename = helpers.replaceExtension(ep_obj.location, 'metathumb')
+            tbn_filename = replace_extension(ep_obj.location, 'metathumb')
         else:
             return None
 
diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py
index ee3f0693df2f5176e85c8f06ed10a3a27fa8dd5a..1394505ac1b8c158a3df531bf66ef45eb7dcc0a0 100644
--- a/sickbeard/name_parser/parser.py
+++ b/sickbeard/name_parser/parser.py
@@ -18,7 +18,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-
 import os
 import time
 import re
@@ -27,6 +26,7 @@ import regexes
 import sickbeard
 
 from sickbeard import logger, helpers, scene_numbering, common, scene_exceptions, db
+from sickrage.helper.common import remove_extension
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 from dateutil import parser
@@ -410,7 +410,7 @@ class NameParser(object):
         dir_name, file_name = ek(os.path.split, name)
 
         if self.file_name:
-            base_file_name = helpers.remove_extension(file_name)
+            base_file_name = remove_extension(file_name)
         else:
             base_file_name = file_name
 
diff --git a/sickbeard/name_parser/regexes.py b/sickbeard/name_parser/regexes.py
index b2beb6882e3eb7d75a7db5548994d307ffc70d96..211375f92273c29b139ab8b1048abbccd63b2591 100644
--- a/sickbeard/name_parser/regexes.py
+++ b/sickbeard/name_parser/regexes.py
@@ -67,6 +67,18 @@ normal_regexes = [
      -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$              # Group
      '''),
 
+    ('newpct',
+     # American Horror Story - Temporada 4 HDTV x264[Cap.408_409]SPANISH AUDIO -NEWPCT
+     # American Horror Story - Temporada 4 [HDTV][Cap.408][Espanol Castellano]
+     # American Horror Story - Temporada 4 HDTV x264[Cap.408]SPANISH AUDIO –NEWPCT)
+     r'''
+     (?P<series_name>.+?).-.+\d{1,2}[ ,\.]       # Show name: American Horror Story
+     (?P<extra_info>.+)\[Cap\.                   # Quality: HDTV x264, [HDTV], HDTV x264
+     (?P<season_num>\d{1,2})                     # Season Number: 4
+     (?P<ep_num>\d{2})                           # Episode Number: 08
+     ((_\d{1,2}(?P<extra_ep_num>\d{2}))|.*])     # Episode number2: 09
+     '''),
+
     ('fov',
      # Show_Name.1x02.Source_Quality_Etc-Group
      # Show Name - 1x02 - My Ep Name
@@ -117,17 +129,6 @@ normal_regexes = [
      (?P<ep_num>\d{2})$                          # 02
      '''),
 
-    ('newpct',
-     # Example: Sobrenatural - Temporada 10 [HDTV][Cap.1023][Espanol Castellano]
-     r'''
-     (?P<series_name>.+?)                      # Showw_Name: "Sobrenatural"
-     (?:.-.+\d{1,2}.\[)                        # Separator and junk: " - Temporada 10 ["
-     (?P<extra_info>.+)                        # Quality: "HDTV"
-     (?:\]\[.+\.)                              # junk: "][Cap."
-     (?P<season_num>\d{1,2})                   # Season number: "10"
-     (?P<ep_num>\d{2})(?:])                    # Episode number: "23"
-     '''),
-
     ('verbose',
      # Show Name Season 1 Episode 2 Ep Name
      r'''
diff --git a/sickbeard/nzbSplitter.py b/sickbeard/nzbSplitter.py
index 311443aa5077f21f403276a03dcd8f446daf44a6..4374a76d74d09176792ed0d6cb5d57222ad7a71c 100644
--- a/sickbeard/nzbSplitter.py
+++ b/sickbeard/nzbSplitter.py
@@ -1,5 +1,6 @@
+# coding=utf-8
 # Author: Nic Wolfe <nic@wolfeden.ca>
-# URL: https://sickrage.github.io
+# URL: https://SickRage.GitHub.io
 # Git: https://github.com/SickRage/SickRage.git
 #
 # This file is part of SickRage.
@@ -17,190 +18,211 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+# pylint: disable=line-too-long
 
-import requests
+import requests  # pylint: disable=import-error
 import re
 
 try:
-    import xml.etree.cElementTree as etree
+    import xml.etree.cElementTree as ETree
 except ImportError:
-    import xml.etree.ElementTree as etree
+    import xml.etree.ElementTree as ETree
 
 from sickbeard import logger, classes, helpers
 from sickbeard.common import Quality
+from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 from sickrage.helper.encoding import ek, ss
 from sickrage.helper.exceptions import ex
 
-from name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 
-
-def getSeasonNZBs(name, urlData, season):
+def get_season_nzbs(name, url_data, season):
     """
     Split a season NZB into episodes
 
     :param name: NZB name
-    :param urlData: URL to get data from
+    :param url_data: URL to get data from
     :param season: Season to check
     :return: dict of (episode files, xml matches)
     """
-    try:
-        showXML = etree.ElementTree(etree.XML(urlData))
-    except SyntaxError:
-        logger.log(u"Unable to parse the XML of " + name + ", not splitting it", logger.ERROR)
-        return ({}, '')
 
-    filename = name.replace(".nzb", "")
+    # TODO: clean up these regex'es, comment them, and make them all raw strings
+    regex_string = {
+        # Match the xmlns in an nzb
+        # Example:  nzbElement.getchildren()[1].tag == '{http://www.newzbin.com/DTD/2003/nzb}file'
+        #           regex match returns  'http://www.newzbin.com/DTD/2003/nzb'
+        'nzb_xmlns': r"{(http://[\w_\./]+nzb)}file",
+        'scene_name': '([\w\._\ ]+)[\. ]S%02d[\. ]([\w\._\-\ ]+)[\- ]([\w_\-\ ]+?)',  # pylint: disable=anomalous-backslash-in-string
+        'episode': '\.S%02d(?:[E0-9]+)\.[\w\._]+\-\w+',  # pylint: disable=anomalous-backslash-in-string
+    }
 
-    nzbElement = showXML.getroot()
+    try:
+        show_xml = ETree.ElementTree(ETree.XML(url_data))
+    except SyntaxError:
+        logger.log(u"Unable to parse the XML of " + name + ", not splitting it", logger.ERROR)  # pylint: disable=no-member
+        return {}, ''
 
-    regex = '([\w\._\ ]+)[\. ]S%02d[\. ]([\w\._\-\ ]+)[\- ]([\w_\-\ ]+?)' % season
+    nzb_element = show_xml.getroot()
 
-    sceneNameMatch = re.search(regex, filename, re.I)
-    if sceneNameMatch:
-        showName, qualitySection, groupName = sceneNameMatch.groups()  # @UnusedVariable
-    else:
-        logger.log(u"Unable to parse " + name + " into a scene name. If it's a valid one log a bug.", logger.ERROR)
-        return ({}, '')
+    scene_name_match = re.search(regex_string['scene_name'] % season, filename, re.I)
+    if scene_name_match:
+        show_name = scene_name_match.groups()[0]
+    else:  # Make sure we aren't missing valid results after changing name_parser and the quality detection
+        # Most of these will likely be invalid shows
+        logger.log(u"Unable to parse " + name + " into a scene name.", logger.DEBUG)   # pylint: disable=no-member
+        return {}, ''
 
-    regex = '(' + re.escape(showName) + '\.S%02d(?:[E0-9]+)\.[\w\._]+\-\w+' % season + ')'
+    regex = '(' + re.escape(show_name) + regex_string['episode'] % season + ')'
     regex = regex.replace(' ', '.')
 
-    epFiles = {}
+    ep_files = {}
     xmlns = None
 
-    for curFile in nzbElement.getchildren():
-        xmlnsMatch = re.match("\{(http:\/\/[A-Za-z0-9_\.\/]+\/nzb)\}file", curFile.tag)
-        if not xmlnsMatch:
+    for cur_file in nzb_element.getchildren():
+        xmlns_match = re.match(regex_string['nzb_xmlns'], cur_file.tag)
+        if not xmlns_match:
             continue
         else:
-            xmlns = xmlnsMatch.group(1)
-        match = re.search(regex, curFile.get("subject"), re.I)
+            xmlns = xmlns_match.group(1)
+        match = re.search(regex, cur_file.get("subject"), re.I)
         if not match:
-            # print curFile.get("subject"), "doesn't match", regex
+            # regex couldn't match cur_file.get("subject")
             continue
-        curEp = match.group(1)
-        if curEp not in epFiles:
-            epFiles[curEp] = [curFile]
+        cur_ep = match.group(1)
+        if cur_ep not in ep_files:
+            ep_files[cur_ep] = [cur_file]
         else:
-            epFiles[curEp].append(curFile)
+            ep_files[cur_ep].append(cur_file)
+    # TODO: Decide what to do if we found multiple valid xmlns strings, should we only return the last???
+    return ep_files, xmlns
 
-    return (epFiles, xmlns)
 
+def create_nzb_string(file_elements, xmlns):
+    """
+    Extract extra info from file_elements.
 
-def createNZBString(fileElements, xmlns):
-    rootElement = etree.Element("nzb")
+    :param file_elements: to be processed
+    :param xmlns: the xml namespace to be used
+    :return: string containing all extra info extracted from the file_elements
+    """
+    root_element = ETree.Element("nzb")
     if xmlns:
-        rootElement.set("xmlns", xmlns)
+        root_element.set("xmlns", xmlns)
 
-    for curFile in fileElements:
-        rootElement.append(stripNS(curFile, xmlns))
+    for cur_file in file_elements:
+        root_element.append(strip_xmlns(cur_file, xmlns))
 
-    return etree.tostring(ss(rootElement))
+    return ETree.tostring(ss(root_element))
 
 
-def saveNZB(nzbName, nzbString):
+def save_nzb(nzb_name, nzb_string):
     """
     Save NZB to disk
 
-    :param nzbName: Filename/path to write to
-    :param nzbString: Content to write in file
+    :param nzb_name: Filename/path to write to
+    :param nzb_string: Content to write in file
     """
     try:
-        with ek(open, nzbName + ".nzb", 'w') as nzb_fh:
-            nzb_fh.write(nzbString)
+        with ek(open, nzb_name + ".nzb", 'w') as nzb_fh:
+            nzb_fh.write(nzb_string)
 
-    except EnvironmentError, e:
-        logger.log(u"Unable to save NZB: " + ex(e), logger.ERROR)
+    except EnvironmentError as error:
+        logger.log(u"Unable to save NZB: " + ex(error), logger.ERROR)  # pylint: disable=no-member
 
 
-def stripNS(element, ns):
-    element.tag = element.tag.replace("{" + ns + "}", "")
-    for curChild in element.getchildren():
-        stripNS(curChild, ns)
+def strip_xmlns(element, xmlns):
+    """
+    Remove the xml namespace from the element's children.
+
+    :param element: to be processed
+    :param xmlns: xml namespace to be removed
+    :return: processed element
+    """
+    element.tag = element.tag.replace("{" + xmlns + "}", "")
+    for cur_child in element.getchildren():
+        strip_xmlns(cur_child, xmlns)
 
     return element
 
 
-def splitResult(result):
+def split_result(obj):
     """
-    Split result into seperate episodes
+    Split obj into separate episodes.
 
-    :param result: search result object
-    :return: False upon failure, a list of episode objects otherwise
+    :param obj: to search for results
+    :return: a list of episode objects or an empty list
     """
-    urlData = helpers.getURL(result.url, session=requests.Session(), needBytes=True)
-    if urlData is None:
-        logger.log(u"Unable to load url " + result.url + ", can't download season NZB", logger.ERROR)
-        return False
+    url_data = helpers.getURL(obj.url, session=requests.Session(), needBytes=True)
+    if url_data is None:
+        logger.log(u"Unable to load url " + obj.url + ", can't download season NZB", logger.ERROR)  # pylint: disable=no-member
+        return []
 
     # parse the season ep name
     try:
-        np = NameParser(False, showObj=result.show)
-        parse_result = np.parse(result.name)
+        parsed_obj = NameParser(False, showObj=obj.show).parse(obj.name)
     except InvalidNameException:
-        logger.log(u"Unable to parse the filename " + result.name + " into a valid episode", logger.DEBUG)
-        return False
+        logger.log(u"Unable to parse the filename " + obj.name + " into a valid episode", logger.DEBUG)  # pylint: disable=no-member
+        return []
     except InvalidShowException:
-        logger.log(u"Unable to parse the filename " + result.name + " into a valid show", logger.DEBUG)
-        return False
+        logger.log(u"Unable to parse the filename " + obj.name + " into a valid show", logger.DEBUG)  # pylint: disable=no-member
+        return []
 
     # bust it up
-    season = parse_result.season_number if parse_result.season_number is not None else 1
-
-    separateNZBs, xmlns = getSeasonNZBs(result.name, urlData, season)
+    season = 1 if parsed_obj.season_number is None else parsed_obj.season_number
 
-    resultList = []
+    separate_nzbs, xmlns = get_season_nzbs(obj.name, url_data, season)
 
-    for newNZB in separateNZBs:
+    result_list = []
 
-        logger.log(u"Split out " + newNZB + " from " + result.name, logger.DEBUG)
+    # TODO: Re-evaluate this whole section
+    #   If we have valid results and hit an exception, we ignore the results found so far.
+    #   Maybe we should return the results found or possibly continue with the next iteration of the loop
+    #   Also maybe turn this into a function and generate the results_list with a list comprehension instead
+    for new_nzb in separate_nzbs:
+        logger.log(u"Split out " + new_nzb + " from " + obj.name, logger.DEBUG)  # pylint: disable=no-member
 
         # parse the name
         try:
-            np = NameParser(False, showObj=result.show)
-            parse_result = np.parse(newNZB)
+            parsed_obj = NameParser(False, showObj=obj.show).parse(new_nzb)
         except InvalidNameException:
-            logger.log(u"Unable to parse the filename " + newNZB + " into a valid episode", logger.DEBUG)
-            return False
+            logger.log(u"Unable to parse the filename " + new_nzb + " into a valid episode", logger.DEBUG)  # pylint: disable=no-member
+            return []
         except InvalidShowException:
-            logger.log(u"Unable to parse the filename " + newNZB + " into a valid show", logger.DEBUG)
-            return False
+            logger.log(u"Unable to parse the filename " + new_nzb + " into a valid show", logger.DEBUG)  # pylint: disable=no-member
+            return []
 
         # make sure the result is sane
-        if (parse_result.season_number is not None and parse_result.season_number != season) or (
-                parse_result.season_number is None and season != 1):
-            logger.log(
-                u"Found " + newNZB + " inside " + result.name + " but it doesn't seem to belong to the same season, ignoring it",
-                logger.WARNING)
+        if (parsed_obj.season_number != season) or (parsed_obj.season_number is None and season != 1):
+            # pylint: disable=no-member
+            logger.log(u"Found " + new_nzb + " inside " + obj.name + " but it doesn't seem to belong to the same season, ignoring it",
+                       logger.WARNING)
             continue
-        elif len(parse_result.episode_numbers) == 0:
-            logger.log(
-                u"Found " + newNZB + " inside " + result.name + " but it doesn't seem to be a valid episode NZB, ignoring it",
-                logger.WARNING)
+        elif len(parsed_obj.episode_numbers) == 0:
+            # pylint: disable=no-member
+            logger.log(u"Found " + new_nzb + " inside " + obj.name + " but it doesn't seem to be a valid episode NZB, ignoring it",
+                       logger.WARNING)
             continue
 
-        wantEp = True
-        for epNo in parse_result.episode_numbers:
-            if not result.extraInfo[0].wantEpisode(season, epNo, result.quality):
-                logger.log(u"Ignoring result " + newNZB + " because we don't want an episode that is " +
-                           Quality.qualityStrings[result.quality], logger.INFO)
-                wantEp = False
+        want_ep = True
+        for ep_num in parsed_obj.episode_numbers:
+            if not obj.extraInfo[0].wantEpisode(season, ep_num, obj.quality):
+                # pylint: disable=no-member
+                logger.log(u"Ignoring result " + new_nzb + " because we don't want an episode that is " +
+                           Quality.qualityStrings[obj.quality], logger.INFO)
+                want_ep = False
                 break
-        if not wantEp:
+        if not want_ep:
             continue
 
         # get all the associated episode objects
-        epObjList = []
-        for curEp in parse_result.episode_numbers:
-            epObjList.append(result.extraInfo[0].getEpisode(season, curEp))
+        ep_obj_list = [obj.extraInfo[0].getEpisode(season, ep) for ep in parsed_obj.episode_numbers]
 
         # make a result
-        curResult = classes.NZBDataSearchResult(epObjList)
-        curResult.name = newNZB
-        curResult.provider = result.provider
-        curResult.quality = result.quality
-        curResult.extraInfo = [createNZBString(separateNZBs[newNZB], xmlns)]
+        cur_obj = classes.NZBDataSearchResult(ep_obj_list)
+        cur_obj.name = new_nzb
+        cur_obj.provider = obj.provider
+        cur_obj.quality = obj.quality
+        cur_obj.extraInfo = [create_nzb_string(separate_nzbs[new_nzb], xmlns)]
 
-        resultList.append(curResult)
+        result_list.append(cur_obj)
 
-    return resultList
+    return result_list
diff --git a/sickbeard/postProcessor.py b/sickbeard/postProcessor.py
index de0602842985001cc4cd24ab4d0dc15b5864c63e..0dee5ce8001386351f736d265ecfa954e12bc3d3 100644
--- a/sickbeard/postProcessor.py
+++ b/sickbeard/postProcessor.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-
 import glob
 import fnmatch
 import os
@@ -36,7 +35,7 @@ from sickbeard import notifiers
 from sickbeard import show_name_helpers
 from sickbeard import failed_history
 from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
-from sickrage.helper.common import subtitle_extensions
+from sickrage.helper.common import remove_extension, replace_extension, subtitle_extensions
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import EpisodeNotFoundException, EpisodePostProcessingFailedException, ex
 from sickrage.helper.exceptions import ShowDirectoryNotFoundException
@@ -353,7 +352,7 @@ class PostProcessor(object):
                 new_file_name = new_base_name + '.' + cur_extension
             # if we're not renaming we still want to change extensions sometimes
             else:
-                new_file_name = helpers.replaceExtension(cur_file_name, cur_extension)
+                new_file_name = replace_extension(cur_file_name, cur_extension)
 
             if sickbeard.SUBTITLES_DIR and cur_extension[-3:] in subtitle_extensions:
                 subs_new_path = ek(os.path.join, new_path, sickbeard.SUBTITLES_DIR)
@@ -487,7 +486,7 @@ class PostProcessor(object):
         myDB = db.DBConnection()
         for curName in names:
             search_name = re.sub(r"[\.\- ]", "_", curName)
-            sql_results = myDB.select("SELECT * FROM history WHERE resource LIKE ?", [search_name])
+            sql_results = myDB.select("SELECT showid, season, quality, version, resource FROM history WHERE resource LIKE ? AND action LIKE '%4'", [search_name])
 
             if len(sql_results) == 0:
                 continue
@@ -530,7 +529,7 @@ class PostProcessor(object):
                                          or parse_result.air_date) and parse_result.release_group:
 
             if not self.release_name:
-                self.release_name = helpers.remove_non_release_groups(helpers.remove_extension(ek(os.path.basename, parse_result.original_name)))
+                self.release_name = helpers.remove_non_release_groups(remove_extension(ek(os.path.basename, parse_result.original_name)))
 
         else:
             logger.log(u"Parse result not sufficient (all following have to be set). will not save release name",
@@ -558,7 +557,7 @@ class PostProcessor(object):
 
         logger.log(u"Analyzing name " + name, logger.DEBUG)
 
-        name = helpers.remove_non_release_groups(helpers.remove_extension(name))
+        name = helpers.remove_non_release_groups(remove_extension(name))
 
         # parse the name to break it into show name, season, and episode
         np = NameParser(True, tryIndexers=True)
@@ -678,16 +677,16 @@ class PostProcessor(object):
                     [show.indexerid, show.indexer, airdate])
 
                 if sql_result:
-                    season = int(sql_result[0][0])
-                    episodes = [int(sql_result[0][1])]
+                    season = int(sql_result[0]['season'])
+                    episodes = [int(sql_result[0]['episode'])]
                 else:
                     # Found no result, try with season 0
                     sql_result = myDB.select(
                         "SELECT season, episode FROM tv_episodes WHERE showid = ? and indexer = ? and airdate = ?",
                         [show.indexerid, show.indexer, airdate])
                     if sql_result:
-                        season = int(sql_result[0][0])
-                        episodes = [int(sql_result[0][1])]
+                        season = int(sql_result[0]['season'])
+                        episodes = [int(sql_result[0]['episode'])]
                     else:
                         self._log(
                             u"Unable to find episode with date " +
@@ -700,7 +699,7 @@ class PostProcessor(object):
             elif season is None and show:
                 myDB = db.DBConnection()
                 numseasonsSQlResult = myDB.select(
-                    "SELECT COUNT(DISTINCT season) as numseasons FROM tv_episodes WHERE showid = ? and indexer = ? and season != 0",
+                    "SELECT COUNT(DISTINCT season) FROM tv_episodes WHERE showid = ? and indexer = ? and season != 0",
                     [show.indexerid, show.indexer])
                 if int(numseasonsSQlResult[0][0]) == 1 and season is None:
                     self._log(
@@ -981,8 +980,8 @@ class PostProcessor(object):
             if int(ep_obj.season) > 0:
                 myDB = db.DBConnection()
                 max_season = myDB.select(
-                    "SELECT MAX(season) as maxseason FROM tv_episodes WHERE showid = ? and indexer = ?",
-                    [show.indexerid, show.indexer])
+                    "SELECT MAX(season) FROM tv_episodes WHERE showid = ? and indexer = ?", [show.indexerid, show.indexer])
+
                 # If the file season (ep_obj.season) is bigger than the indexer season (max_season[0][0]), skip the file
                 if int(ep_obj.season) > int(max_season[0][0]):
                     self._log(u"File has season %s, while the indexer is on season %s. The file may be incorrectly labeled or fake, aborting."
diff --git a/sickbeard/processTV.py b/sickbeard/processTV.py
index ec6ddd064b93a5d5a86c8a7e7975c009e8350dbb..9e2ed2431096cda5cc396d8f0a95bcb3ccd7f644 100644
--- a/sickbeard/processTV.py
+++ b/sickbeard/processTV.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-
 import os
 import stat
 
@@ -28,7 +27,7 @@ from sickbeard import logger
 from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 from sickbeard import common
 from sickbeard import failedProcessor
-from sickrage.helper.common import subtitle_extensions
+from sickrage.helper.common import is_sync_file, is_torrent_or_nzb_file, subtitle_extensions
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import EpisodePostProcessingFailedException, ex, FailedPostProcessingFailedException
 
@@ -176,8 +175,8 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
 
     path, dirs, files = get_path_dir_files(dirName, nzbName, proc_type)
 
-    files = [x for x in files if helpers.notTorNZBFile(x)]
-    SyncFiles = [x for x in files if helpers.isSyncFile(x)]
+    files = [x for x in files if not is_torrent_or_nzb_file(x)]
+    SyncFiles = [x for x in files if is_sync_file(x)]
 
     # Don't post process if files are still being synced and option is activated
     if SyncFiles and sickbeard.POSTPONE_IF_SYNC_FILES:
@@ -241,7 +240,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
 
             postpone = False
 
-            SyncFiles = [x for x in fileList if helpers.isSyncFile(x)]
+            SyncFiles = [x for x in fileList if is_sync_file(x)]
 
             # Don't post process if files are still being synced and option is activated
             if SyncFiles and sickbeard.POSTPONE_IF_SYNC_FILES:
diff --git a/sickbeard/providers/bitcannon.py b/sickbeard/providers/bitcannon.py
index ebdd16551107fca7e2a21f9d60234da964f5529e..a3b9481d1c8c0a50c731bd8c6d247308f43452f9 100644
--- a/sickbeard/providers/bitcannon.py
+++ b/sickbeard/providers/bitcannon.py
@@ -17,7 +17,8 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from urllib import quote_plus
+import traceback
+from urllib import urlencode
 
 from sickbeard import logger
 from sickbeard import tvcache
@@ -34,63 +35,91 @@ class BitCannonProvider(generic.TorrentProvider):
         self.minseed = None
         self.minleech = None
         self.ratio = 0
+        self.custom_url = None
+        self.api_key = None
 
         self.cache = BitCannonCache(self)
 
-        self.url = 'http://127.0.0.1:1337/'
-        self.urls = {
-            'base_url': self.url,
-            'search': self.url + 'search/',
-            'trackers': self.url + 'stats',
+        self.search_params = {
+            'q': '',
+            'category': 'tv',
+            'apiKey': ''
         }
 
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
+        # search_strings comes in one of these formats:
+        #      {'Episode': ['Italian Works S05E10']}
+        #      {'Season': ['Italian Works S05']}
+        #      {'RSS': ['tv', 'anime']}
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        trackers = (self.getURL(self.urls['trackers'], json=True) or {}).get(u'Trackers', [])
-        if not trackers:
-            logger.log(u'Could not get tracker list from BitCannon, aborting search')
-            return results
+        # select the correct category (TODO:  Add more categories?)
+        anime = (self.show and self.show.anime) or (epObj and epObj.show and epObj.show.anime) or False
+        self.search_params['category'] = ('tv', 'anime')[anime]
+
+        # Set API Key (if applicable)
+        if self.api_key:
+            self.search_params['apiKey'] = self.api_key
 
         for mode in search_strings.keys():
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
-                searchURL = self.urls['search'] + search_string
-                logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
-                data = self.getURL(searchURL, json=True)
-                for item in data or []:
-                    if 'tv' not in (item.get('Category') or u'').lower():
-                        continue
 
-                    title = item.get(u'Title', u'')
-                    info_hash = item.get(u'Btih', u'')
-                    if not all([title, info_hash]):
+                self.search_params['q'] = search_string.encode('utf-8') if mode is not 'RSS' else ''
+                if mode is not 'RSS':
+                    logger.log(u"Search string: %s" % search_string, logger.DEBUG)
+
+                try:
+                    url = "http://localhost:3000/"    # a default
+                    if self.custom_url is not None:
+                        if not self.custom_url.endswith('/'):
+                            self.custom_url += '/'
+                        url = self.custom_url
+                    search_url = url + "api/search?" + urlencode(self.search_params)
+                    logger.log(u"Search URL: %s" % search_url, logger.DEBUG)
+                    parsed_json = self.getURL(search_url, json=True)
+
+                    if not parsed_json:
+                        logger.log(u"No data returned from provider", logger.DEBUG)
                         continue
 
-                    swarm = item.get(u'Swarm', {})
-                    seeders = swarm.get(u'Seeders', 0)
-                    leechers = swarm.get(u'Leechers', 0)
-                    size = item.get(u'Size', -1)
+                    if self._check_auth_from_data(parsed_json):
+                        try:
+                            found_torrents = parsed_json['torrents']
+                        except Exception:
+                            found_torrents = {}
 
-                    # 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
+                        for result in found_torrents:
+                            try:
+                                title = result.get('title', '')
+                                info_hash = result.get('infoHash', '')
+                                swarm = result.get('swarm', None)
+                                size = int(result.get('size', 0))
+                                if swarm is not None:
+                                    seeders = int(swarm.get('seeders', 0))
+                                    leechers = int(swarm.get('leechers', 0))
+                                download_url = "magnet:?xt=urn:btih:" + info_hash
+
+                            except (AttributeError, TypeError, KeyError, ValueError):
+                                continue
 
-                    # Only build the url if we selected it
-                    download_url = 'magnet:?xt=urn:btih:%s&dn=%s&tr=%s' % (info_hash, quote_plus(title.encode('utf-8')), u'&tr='.join([quote_plus(x.encode('utf-8')) for x in trackers]))
+                            if seeders < self.minseed or leechers < self.minleech:
+                                if mode is not '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
 
-                    item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
-                        logger.log(u"Found result: %s " % title, logger.DEBUG)
+                            item = title, download_url, size, seeders, leechers
+                            if mode is not 'RSS':
+                                logger.log(u"Found result: %s " % title, logger.DEBUG)
 
-                    items[mode].append(item)
+                            items[mode].append(item)
+
+                except Exception:
+                    logger.log(u"Failed parsing provider. Traceback: %r" % traceback.format_exc(), logger.ERROR)
 
             # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
-
             results += items[mode]
 
         return results
@@ -98,18 +127,25 @@ class BitCannonProvider(generic.TorrentProvider):
     def seedRatio(self):
         return self.ratio
 
+    @staticmethod
+    def _check_auth_from_data(data):
+        if data and hasattr(data, 'status') and hasattr(data, 'message'):
+            if data and data['status'] == 401 and data['message'] == 'Invalid API key':
+                logger.log(u"Invalid api key. Check your settings", logger.WARNING)
+                return False
+
+        return True
 
 class BitCannonCache(tvcache.TVCache):
     def __init__(self, provider_obj):
 
         tvcache.TVCache.__init__(self, provider_obj)
 
-        # only poll KickAss every 10 minutes max
+        # only poll bitcannon every 20 minutes max
         self.minTime = 20
 
     def _getRSSData(self):
-        return {'entries': []}
-        # search_strings = {'RSS': ['']}
-        # return {'entries': self.provider._doSearch(search_strings)}
+        search_params = {'RSS': ['tv', 'anime']}
+        return {'entries': self.provider._doSearch(search_params)}
 
 provider = BitCannonProvider()
diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py
index b1c59d0650abde589970abfedd7a5c95d33fc5cb..89f1526be4a1656e2e8d578d6493e40140bd76ca 100644
--- a/sickbeard/providers/generic.py
+++ b/sickbeard/providers/generic.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-
 import datetime
 import os
 import re
@@ -35,10 +34,12 @@ from sickbeard import tvcache
 from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 from sickbeard.common import Quality
 from sickbeard.common import user_agents
+from sickrage.helper.common import sanitize_filename
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 from sickbeard import show_name_helpers
 
+
 class GenericProvider(object):
     NZB = "nzb"
     TORRENT = "torrent"
@@ -163,12 +164,10 @@ class GenericProvider(object):
             urls = [result.url]
 
         if self.providerType == GenericProvider.TORRENT:
-            filename = ek(os.path.join, sickbeard.TORRENT_DIR,
-                          helpers.sanitizeFileName(result.name) + '.' + self.providerType)
+            filename = ek(os.path.join, sickbeard.TORRENT_DIR, sanitize_filename(result.name) + '.' + self.providerType)
 
         elif self.providerType == GenericProvider.NZB:
-            filename = ek(os.path.join, sickbeard.NZB_DIR,
-                          helpers.sanitizeFileName(result.name) + '.' + self.providerType)
+            filename = ek(os.path.join, sickbeard.NZB_DIR, sanitize_filename(result.name) + '.' + self.providerType)
 
         return urls, filename
 
diff --git a/sickbeard/providers/newpct.py b/sickbeard/providers/newpct.py
index 3bcd2caaffb668c71f5d06d7670bf2259f0e0861..6365f9640944200b244cf2126e9ac22e88d67dd6 100644
--- a/sickbeard/providers/newpct.py
+++ b/sickbeard/providers/newpct.py
@@ -45,38 +45,30 @@ class newpctProvider(generic.TorrentProvider):
 
         self.urls = {
             'base_url': 'http://www.newpct.com',
-            'search': 'http://www.newpct.com/buscar-descargas/'
+            'search': 'http://www.newpct.com/index.php'
         }
 
         self.url = self.urls['base_url']
 
         """
         Search query:
-        http://www.newpct.com/buscar-descargas/cID=0&tLang=0&oBy=0&oMode=0&category_=767&subcategory_=All&idioma_=1&calidad_=All&oByAux=0&oModeAux=0&size_=0&btnb=Filtrar+Busqueda&q=the+strain
+        http://www.newpct.com/index.php?l=doSearch&q=fringe&category_=767&idioma_=1&bus_de_=All
+
+        q => Show name
+        category_ = Category "Shows" (767)
+        idioma_ = Language Spanish (1)
+        bus_de_ = Date from (All, Semana)
 
-        category_=767 => Category Shows
-        idioma_=1 => Language Spanish
-        calidad_=All=> Quality ALL
-        q => Search show
         """
 
         self.search_params = {
-            'cID': 0,
-            'tLang': 0,
-            'oBy': 0,
-            'oMode': 0,
+            'l': 'doSearch',
+            'q': '',
             'category_': 767,
-            'subcategory_': 'All',
             'idioma_': 1,
-            'calidad_': 'All',
-            'oByAux': 0,
-            'oModeAux': 0,
-            'size_': 0,
-            'btnb': 'Filtrar+Busqueda',
-            'q': ''
+            'bus_de_': 'All'
         }
 
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
@@ -84,21 +76,26 @@ class newpctProvider(generic.TorrentProvider):
 
         # Only search if user conditions are true
         lang_info = '' if not epObj or not epObj.show else epObj.show.lang
-        if self.onlyspasearch and lang_info != 'es':
-            logger.log(u"Show info is not spanish, skipping provider search", logger.DEBUG)
-            return results
 
         for mode in search_strings.keys():
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
 
+            # Only search if user conditions are true
+            if self.onlyspasearch and lang_info != 'es' and mode is not 'RSS':
+                logger.log(u"Show info is not spanish, skipping provider search", logger.DEBUG)
+                continue
+
             for search_string in search_strings[mode]:
                 if mode != 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
-                self.search_params.update({'q': search_string.strip()})
+                self.search_params['q'] = search_string.strip() if mode is not 'RSS' else ''
+                self.search_params['bus_de_'] = 'All' if mode is not 'RSS' else 'semana'
 
-                logger.log(u"Search URL: %s" % self.urls['search'] + '?' + urllib.parse.urlencode(self.search_params), logger.DEBUG)
-                data = self.getURL(self.urls['search'], post_data=self.search_params, timeout=30)
+                searchURL = self.urls['search'] + '?' + urllib.parse.urlencode(self.search_params)
+                logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
+
+                data = self.getURL(searchURL, timeout=30)
                 if not data:
                     continue
 
@@ -220,26 +217,27 @@ class newpctProvider(generic.TorrentProvider):
 
     @staticmethod
     def _processTitle(title):
-
         # Remove "Mas informacion sobre " literal from title
         title = title[22:]
 
-        # Quality
-        title = title.replace('[HDTV]', '[720p HDTV x264]')
-        title = title.replace('[HDTV 720p AC3 5.1]', '[720p HDTV x264]')
-        title = title.replace('[HDTV 1080p AC3 5.1]', '[1080p HDTV x264]')
-        title = title.replace('[DVDRIP]', '[DVDrip x264]')
-        title = title.replace('[DVD Rip]', '[DVDrip x264]')
-        title = title.replace('[DVDrip]', '[DVDrip x264]')
-        title = title.replace('[DVDRIP-AC3.5.1]', '[DVDrip x264]')
-        title = title.replace('[BLuRayRip]', '[720p BlueRay x264]')
-        title = title.replace('[BRrip]', '[720p BlueRay x264]')
-        title = title.replace('[BDrip]', '[720p BlueRay x264]')
-        title = title.replace('[BluRay Rip]', '[720p BlueRay x264]')
-        title = title.replace('[BluRay 720p]', '[720p BlueRay x264]')
-        title = title.replace('[BluRay 1080p]', '[1080p BlueRay x264]')
-        title = title.replace('[BluRay MicroHD]', '[1080p BlueRay x264]')
-        title = title.replace('[MicroHD 1080p]', '[1080p BlueRay x264]')
+        # Quality - Use re module to avoid case sensitive problems with replace
+        title = re.sub('\[HDTV 1080p.*]', '1080p HDTV x264', title, flags=re.IGNORECASE)
+        title = re.sub('\[HDTV 720p.*]', '720p HDTV x264', title, flags=re.IGNORECASE)
+        title = re.sub('\[HDTV]', 'HDTV x264', title, flags=re.IGNORECASE)
+        title = re.sub('\[DVD.*]', 'DVDrip x264', title, flags=re.IGNORECASE)
+        title = re.sub('\[BluRay 1080p.*]', '1080p BlueRay x264', title, flags=re.IGNORECASE)
+        title = re.sub('\[BluRay MicroHD.*]', '1080p BlueRay x264', title, flags=re.IGNORECASE)
+        title = re.sub('\[MicroHD 1080p.*]', '1080p BlueRay x264', title, flags=re.IGNORECASE)
+        title = re.sub('\[BLuRay.*]', '720p BlueRay x264', title, flags=re.IGNORECASE)
+        title = re.sub('\[BRrip.*]', '720p BlueRay x264', title, flags=re.IGNORECASE)
+        title = re.sub('\[BDrip.*]', '720p BlueRay x264', title, flags=re.IGNORECASE)
+
+        #Language
+        title = re.sub('\[Spanish.*]', 'SPANISH AUDIO', title, flags=re.IGNORECASE)
+        title = re.sub(ur'\[Español.*]', 'SPANISH AUDIO', title, flags=re.IGNORECASE)
+        title = re.sub(u'\[AC3 5\.1 Español.*]', 'SPANISH AUDIO', title, flags=re.IGNORECASE)
+
+        title += '-NEWPCT'
 
         return title.strip()
 
@@ -250,10 +248,11 @@ class newpctCache(tvcache.TVCache):
         tvcache.TVCache.__init__(self, provider_obj)
 
         # set this 0 to suppress log line, since we aren't updating it anyways
-        self.minTime = 0
+        self.minTime = 20
 
     def _getRSSData(self):
-        return {'entries': []}
+        search_params = {'RSS': ['']}
+        return {'entries': self.provider._doSearch(search_params)}
 
 
 provider = newpctProvider()
diff --git a/sickbeard/search.py b/sickbeard/search.py
index 293016c7039b546878ffa48e3bb7593154954670..6fa7e2bec933e2a145e6aa4e2eebe6b63c580c01 100644
--- a/sickbeard/search.py
+++ b/sickbeard/search.py
@@ -589,7 +589,7 @@ def searchProviders(show, episodes, manualSearch=False, downCurQuality=False):
                     logger.log(u"Breaking apart the NZB and adding the individual ones to our results", logger.DEBUG)
 
                     # if not, break it apart and add them as the lowest priority results
-                    individualResults = nzbSplitter.splitResult(bestSeasonResult)
+                    individualResults = nzbSplitter.split_result(bestSeasonResult)
                     for curResult in individualResults:
                         if len(curResult.episodes) == 1:
                             epNum = curResult.episodes[0].episode
diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py
index 5e06e596a7e4e8d5d4ac81f72a90ed2091ac02f5..402e6a61683c88b1faa4e771fba34ccbe26c9812 100644
--- a/sickbeard/subtitles.py
+++ b/sickbeard/subtitles.py
@@ -24,15 +24,15 @@ import traceback
 import subliminal
 import subprocess
 import pkg_resources
+import sickbeard
 from enzyme import MKV, MalformedMKVError
 from subliminal.api import provider_manager
 from babelfish import Error as BabelfishError, Language, language_converters
-
-import sickbeard
 from sickbeard import logger
 from sickbeard import history
 from sickbeard import db
-from sickrage.helper.common import dateTimeFormat
+from sickbeard import processTV
+from sickrage.helper.common import media_extensions, dateTimeFormat
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 
@@ -153,7 +153,7 @@ def downloadSubtitles(subtitles_info):
 
         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')):
+        if not sickbeard.EMBEDDED_SUBTITLES_ALL and sickbeard.SUBTITLES_EXTRA_SCRIPTS and video_path.rsplit(".", 1)[1] in media_extensions:
             run_subs_extra_scripts(subtitles_info, found_subtitles, video, single=not sickbeard.SUBTITLES_MULTI)
 
         current_subtitles = subtitlesLanguages(video_path)[0]
@@ -350,10 +350,52 @@ class SubtitlesFinder(object):
     """
     def __init__(self):
         self.amActive = False
+    
+    def subtitles_download_in_pp(self):
+        logger.log(u'Checking for needed subtitles in Post-Process folder', logger.INFO)
+
+        providers = getEnabledServiceList()
+        provider_configs = {'addic7ed': {'username': sickbeard.ADDIC7ED_USER, 'password': sickbeard.ADDIC7ED_PASS},
+                        'legendastv': {'username': sickbeard.LEGENDASTV_USER, 'password': sickbeard.LEGENDASTV_PASS},
+                        'opensubtitles': {'username': sickbeard.OPENSUBTITLES_USER, 'password': sickbeard.OPENSUBTITLES_PASS}}
+
+        pool = subliminal.api.ProviderPool(providers=providers, provider_configs=provider_configs)
+
+        # Search for all wanted languages
+        languages = set()
+        for language in frozenset(wantedLanguages()):
+            languages.add(fromietf(language))
+        if not languages:
+            return
+        
+        runPostProcess = False
+        # Check if PP folder is set
+        if sickbeard.TV_DOWNLOAD_DIR and os.path.isdir(sickbeard.TV_DOWNLOAD_DIR):
+            for root, _, files in os.walk(sickbeard.TV_DOWNLOAD_DIR, topdown=False):
+                for videoFilename in sorted(files):
+                    if videoFilename.rsplit(".", 1)[1] in media_extensions:
+                        try:
+                            video = subliminal.scan_video(os.path.join(root, videoFilename), subtitles=False, embedded_subtitles=False)
+                            subtitles_list = pool.list_subtitles(video, languages)
+                            
+                            if not subtitles_list:
+                                logger.log(u'No subtitles found for %s' % os.path.join(root, videoFilename), logger.DEBUG)
+                                continue
+        
+                            found_subtitles = pool.download_best_subtitles(subtitles_list, video, languages=languages, hearing_impaired=sickbeard.SUBTITLES_HEARING_IMPAIRED, only_one=not sickbeard.SUBTITLES_MULTI)
+                            
+                            for subtitle in found_subtitles:
+                                logger.log(u"Found subtitle for %s in %s provider with language %s" % (os.path.join(root, videoFilename), subtitle.provider_name, subtitle.language.opensubtitles), logger.DEBUG)
+                                save_subtitles(video, found_subtitles, directory=root, single=not sickbeard.SUBTITLES_MULTI)
+                                runPostProcess = True
+                        except Exception as e:
+                            logger.log(u"Error occurred when downloading subtitles for: %s. Error: %r" % (os.path.join(root, videoFilename), ex(e)))
+            if runPostProcess:
+                logger.log(u"Starting post-process with defaults settings now that we found subtitles")
+                processTV.processDir(sickbeard.TV_DOWNLOAD_DIR)
 
     def run(self, force=False):
 
-        self.amActive = True
         if not sickbeard.USE_SUBTITLES:
             return
 
@@ -361,6 +403,11 @@ class SubtitlesFinder(object):
             logger.log(u'Not enough services selected. At least 1 service is required to search subtitles in the background', logger.WARNING)
             return
 
+        self.amActive = True
+
+        if sickbeard.SUBTITLES_DOWNLOAD_IN_PP:
+            self.subtitles_download_in_pp()
+
         logger.log(u'Checking for subtitles', logger.INFO)
 
         # get episodes on which we want subtitles
@@ -385,6 +432,7 @@ class SubtitlesFinder(object):
 
         if len(sqlResults) == 0:
             logger.log(u'No subtitles to download', logger.INFO)
+            self.amActive = False
             return
 
         rules = self._getRules()
@@ -407,11 +455,13 @@ class SubtitlesFinder(object):
                 showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(epToSub['showid']))
                 if not showObj:
                     logger.log(u'Show not found', logger.DEBUG)
+                    self.amActive = False
                     return
 
                 epObj = showObj.getEpisode(int(epToSub["season"]), int(epToSub["episode"]))
                 if isinstance(epObj, str):
                     logger.log(u'Episode not found', logger.DEBUG)
+                    self.amActive = False
                     return
 
                 existing_subtitles = epObj.subtitles
@@ -421,6 +471,7 @@ class SubtitlesFinder(object):
                 except Exception as e:
                     logger.log(u'Unable to find subtitles', logger.DEBUG)
                     logger.log(str(e), logger.DEBUG)
+                    self.amActive = False
                     return
 
                 newSubtitles = frozenset(epObj.subtitles).difference(existing_subtitles)
diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index e5463eadfedb0f5b4ea34d4a8a45a62323ad364c..530673a228e351b55e971255f569d212ba008b64 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -33,6 +33,7 @@ from sickbeard.common import SKIPPED
 from sickbeard.common import UNKNOWN
 from sickbeard.common import WANTED
 from sickbeard.common import Quality
+from sickrage.helper.common import sanitize_filename
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 
@@ -453,7 +454,7 @@ class TraktChecker(object):
                 location = None
 
             if location:
-                showPath = ek(os.path.join, location, helpers.sanitizeFileName(name))
+                showPath = ek(os.path.join, location, sanitize_filename(name))
                 dir_exists = helpers.makeDir(showPath)
 
                 if not dir_exists:
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index 93ef682dbc8324b46d46c3af1cba6da17157c016..6559e9c6a7797c9102aa3f11965a7bb47a0257c9 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -16,7 +16,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-
 import os.path
 import datetime
 import threading
@@ -48,7 +47,7 @@ from sickbeard.blackandwhitelist import BlackAndWhiteList
 from sickbeard import network_timezones
 from sickbeard.indexers.indexer_config import INDEXER_TVRAGE
 from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
-from sickrage.helper.common import dateTimeFormat
+from sickrage.helper.common import dateTimeFormat, remove_extension, replace_extension, sanitize_filename
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import EpisodeDeletedException, EpisodeNotFoundException, ex
 from sickrage.helper.exceptions import MultipleEpisodesInDatabaseException, MultipleShowsInDatabaseException
@@ -56,8 +55,7 @@ from sickrage.helper.exceptions import MultipleShowObjectsException, NoNFOExcept
 from sickrage.helper.exceptions import ShowNotFoundException
 
 from sickbeard.common import Quality, Overview, statusStrings
-from sickbeard.common import DOWNLOADED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, ARCHIVED, IGNORED, UNAIRED, WANTED, SKIPPED, \
-    UNKNOWN, FAILED
+from sickbeard.common import DOWNLOADED, SNATCHED, SNATCHED_PROPER, ARCHIVED, IGNORED, UNAIRED, WANTED, SKIPPED, UNKNOWN
 from sickbeard.common import NAMING_DUPLICATE, NAMING_EXTEND, NAMING_LIMITED_EXTEND, NAMING_SEPARATED_REPEAT, \
     NAMING_LIMITED_EXTEND_E_PREFIXED
 
@@ -1300,14 +1298,21 @@ class TVShow(object):
             return Overview.GOOD
         elif epStatus in Quality.FAILED:
             return Overview.WANTED
-        elif epStatus in Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST:
+        elif epStatus in Quality.SNATCHED:
             return Overview.SNATCHED
+        elif epStatus in Quality.SNATCHED_PROPER:
+            return Overview.SNATCHED_PROPER
+        elif epStatus in Quality.SNATCHED_BEST:
+            return Overview.SNATCHED_BEST
         elif epStatus in Quality.DOWNLOADED:
             anyQualities, bestQualities = Quality.splitQuality(self.quality)  # @UnusedVariable
             epStatus, curQuality = Quality.splitCompositeStatus(epStatus)
 
             if curQuality not in anyQualities + bestQualities:
-                if curQuality != Quality.UNKNOWN and curQuality > max(anyQualities):
+                if curQuality != Quality.UNKNOWN and (
+                    (anyQualities and curQuality > max(anyQualities)) or
+                    (bestQualities and curQuality > max(bestQualities))
+                ):
                     return Overview.GOOD
                 else:
                     return Overview.QUAL
@@ -1737,7 +1742,7 @@ class TVEpisode(object):
                         Quality.statusFromName(self.location, anime=self.show.is_anime)), logger.DEBUG)
                     self.status = Quality.statusFromName(self.location, anime=self.show.is_anime)
 
-            nfoFile = sickbeard.helpers.replaceExtension(self.location, "nfo")
+            nfoFile = replace_extension(self.location, "nfo")
             logger.log(str(self.show.indexerid) + u": Using NFO name " + nfoFile, logger.DEBUG)
 
             if ek(os.path.isfile, nfoFile):
@@ -1794,7 +1799,7 @@ class TVEpisode(object):
             else:
                 self.hasnfo = False
 
-            if ek(os.path.isfile, sickbeard.helpers.replaceExtension(nfoFile, "tbn")):
+            if ek(os.path.isfile, replace_extension(nfoFile, "tbn")):
                 self.hastbn = True
             else:
                 self.hastbn = False
@@ -2066,12 +2071,12 @@ class TVEpisode(object):
 
         def release_name(name):
             if name:
-                name = helpers.remove_non_release_groups(helpers.remove_extension(name))
+                name = helpers.remove_non_release_groups(remove_extension(name))
             return name
 
         def release_group(show, name):
             if name:
-                name = helpers.remove_non_release_groups(helpers.remove_extension(name))
+                name = helpers.remove_non_release_groups(remove_extension(name))
             else:
                 return ''
 
@@ -2156,6 +2161,9 @@ class TVEpisode(object):
             '%Y': str(self.airdate.year),
             '%M': str(self.airdate.month),
             '%D': str(self.airdate.day),
+            '%CY': str(datetime.date.today().year),
+            '%CM': str(datetime.date.today().month),
+            '%CD': str(datetime.date.today().day),
             '%0M': '%02d' % self.airdate.month,
             '%0D': '%02d' % self.airdate.day,
             '%RT': "PROPER" if self.is_proper else "",
@@ -2170,9 +2178,9 @@ class TVEpisode(object):
 
         # do the replacements
         for cur_replacement in sorted(replace_map.keys(), reverse=True):
-            result_name = result_name.replace(cur_replacement, helpers.sanitizeFileName(replace_map[cur_replacement]))
+            result_name = result_name.replace(cur_replacement, sanitize_filename(replace_map[cur_replacement]))
             result_name = result_name.replace(cur_replacement.lower(),
-                                              helpers.sanitizeFileName(replace_map[cur_replacement].lower()))
+                                              sanitize_filename(replace_map[cur_replacement].lower()))
 
         return result_name
 
@@ -2406,7 +2414,7 @@ class TVEpisode(object):
         # split off the dirs only, if they exist
         name_groups = re.split(r'[\\/]', pattern)
 
-        return helpers.sanitizeFileName(self._format_pattern(name_groups[-1], multi, anime_type))
+        return sanitize_filename(self._format_pattern(name_groups[-1], multi, anime_type))
 
     def rename(self):
         """
diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py
index 11fb7e6ae0b110f9fe738372169bebb8913b7334..e3092be6c6a6cea6d955207dec19a7dbf8742d42 100644
--- a/sickbeard/webapi.py
+++ b/sickbeard/webapi.py
@@ -31,7 +31,7 @@ import datetime
 import traceback
 
 import sickbeard
-from sickrage.helper.common import dateFormat, dateTimeFormat, timeFormat
+from sickrage.helper.common import dateFormat, dateTimeFormat, pretty_file_size, sanitize_filename, timeFormat
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import CantUpdateShowException, ex, ShowDirectoryNotFoundException
 from sickrage.helper.quality import get_quality_string
@@ -192,8 +192,8 @@ class ApiHandler(RequestHandler):
             for cmd in commands:
                 cur_args, cur_kwargs = self.filter_params(cmd, args, kwargs)
 
-                cmd = cmd.split("_")  # was a index used for this cmd ?
-                cmd, cmd_index = cmd[0], cmd[1:]  # this gives us the clear cmd and the index
+                if len(cmd.split("_")) > 1:
+                    cmd, cmd_index = cmd.split("_")
 
                 logger.log(u"API :: " + cmd + ": cur_kwargs " + str(cur_kwargs), logger.DEBUG)
                 if not (cmd in ('show.getbanner', 'show.getfanart', 'show.getnetworklogo', 'show.getposter') and
@@ -305,10 +305,10 @@ class ApiCall(ApiHandler):
                 for paramName in paramDict:
                     if paramName not in self._help[paramType]:
                         self._help[paramType][paramName] = {}
-                    if paramDict[paramName]["allowedValues"]:
-                        self._help[paramType][paramName]["allowedValues"] = paramDict[paramName]["allowedValues"]
+                    if paramDict[paramName]["allowed_values"]:
+                        self._help[paramType][paramName]["allowed_values"] = paramDict[paramName]["allowed_values"]
                     else:
-                        self._help[paramType][paramName]["allowedValues"] = "see desc"
+                        self._help[paramType][paramName]["allowed_values"] = "see desc"
                     self._help[paramType][paramName]["defaultValue"] = paramDict[paramName]["defaultValue"]
                     self._help[paramType][paramName]["type"] = paramDict[paramName]["type"]
 
@@ -431,7 +431,7 @@ class ApiCall(ApiHandler):
     def _check_param_value(self, value, name, allowed_values):
         """ will check if value (or all values in it ) are in allowed values
             will raise an exception if value is "out of range"
-            if bool(allowedValue) is False a check is not performed and all values are excepted
+            if bool(allowed_value) is False a check is not performed and all values are excepted
         """
         if allowed_values:
             error = False
@@ -755,7 +755,7 @@ class CMD_Episode(ApiCall):
         status, quality = Quality.splitCompositeStatus(int(episode["status"]))
         episode["status"] = _get_status_strings(status)
         episode["quality"] = get_quality_string(quality)
-        episode["file_size_human"] = helpers.pretty_filesize(episode["file_size"])
+        episode["file_size_human"] = pretty_file_size(episode["file_size"])
 
         return _responds(RESULT_SUCCESS, episode)
 
@@ -2168,7 +2168,7 @@ class CMD_ShowAddNew(ApiCall):
         indexer = indexer_result['data']['results'][0]['indexer']
 
         # moved the logic check to the end in an attempt to eliminate empty directory being created from previous errors
-        show_path = ek(os.path.join, self.location, helpers.sanitizeFileName(indexer_name))
+        show_path = ek(os.path.join, self.location, sanitize_filename(indexer_name))
 
         # don't create show dir if config says not to
         if sickbeard.ADD_SHOWS_WO_DIR:
@@ -2798,8 +2798,8 @@ class CMD_Shows(ApiCall):
         shows = {}
         for curShow in sickbeard.showList:
 
-            if not self.paused and not curShow.paused:
-                continue
+            if not self.paused and curShow.paused:  # If we're not including paused shows, and the current show is paused
+                continue  # continue with the next show
 
             indexer_show = helpers.mapIndexersToShow(curShow)
 
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index baa9380f1c216e3f0bb78a744afdea2a91a37ccf..82c55155eecc0c3cca9488c132e6aead3d2dded5 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -53,6 +53,7 @@ from unrar2 import RarFile
 import adba
 from libtrakt import TraktAPI
 from libtrakt.exceptions import traktException
+from sickrage.helper.common import sanitize_filename
 from sickrage.helper.encoding import ek, ss
 from sickrage.helper.exceptions import CantRefreshShowException, CantUpdateShowException, ex
 from sickrage.helper.exceptions import MultipleShowObjectsException, NoNFOException, ShowDirectoryNotFoundException
@@ -1128,17 +1129,19 @@ class Home(WebRoot):
 
         return self.redirect('/' + sickbeard.DEFAULT_PAGE + '/')
 
-    def update(self, pid=None):
+    def update(self, pid=None, branch=None):
 
         if str(pid) != str(sickbeard.PID):
             return self.redirect('/home/')
 
         checkversion = CheckVersion()
-        backup = checkversion._runbackup()
+        backup = checkversion.updater and checkversion._runbackup()
 
         if backup is True:
+            if branch:
+                checkversion.updater.branch = branch
 
-            if sickbeard.versionCheckScheduler.action.update():
+            if checkversion.updater.update():
                 # do a hard restart
                 sickbeard.events.put(sickbeard.events.SystemEvent.RESTART)
 
@@ -1154,7 +1157,7 @@ class Home(WebRoot):
         if sickbeard.BRANCH != branch:
             sickbeard.BRANCH = branch
             ui.notifications.message('Checking out branch: ', branch)
-            return self.update(sickbeard.PID)
+            return self.update(sickbeard.PID, branch)
         else:
             ui.notifications.message('Already on branch: ', branch)
             return self.redirect('/' + sickbeard.DEFAULT_PAGE +'/')
@@ -1257,6 +1260,8 @@ class Home(WebRoot):
         epCounts[Overview.GOOD] = 0
         epCounts[Overview.UNAIRED] = 0
         epCounts[Overview.SNATCHED] = 0
+        epCounts[Overview.SNATCHED_PROPER] = 0
+        epCounts[Overview.SNATCHED_BEST] = 0
 
         for curResult in sqlResults:
             curEpCat = showObj.getOverview(int(curResult["status"] or -1))
@@ -1484,6 +1489,7 @@ class Home(WebRoot):
                 showObj.rls_ignore_words = rls_ignore_words.strip()
                 showObj.rls_require_words = rls_require_words.strip()
 
+            location = unicode(location, 'UTF-8')
             # 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):
                 logger.log(os.path.normpath(showObj._location) + " != " + os.path.normpath(location), logger.DEBUG)
@@ -2257,7 +2263,7 @@ class HomeAddShows(Home):
 
     @staticmethod
     def sanitizeFileName(name):
-        return helpers.sanitizeFileName(name)
+        return sanitize_filename(name)
 
     @staticmethod
     def searchIndexersForShowName(search_term, lang=None, indexer=None):
@@ -2585,7 +2591,7 @@ class HomeAddShows(Home):
             location = None
 
         if location:
-            show_dir = ek(os.path.join, location, helpers.sanitizeFileName(showName))
+            show_dir = ek(os.path.join, location, sanitize_filename(showName))
             dir_exists = helpers.makeDir(show_dir)
             if not dir_exists:
                 logger.log(u"Unable to create the folder " + show_dir + ", can't add the show", logger.ERROR)
@@ -2676,7 +2682,7 @@ class HomeAddShows(Home):
         if fullShowPath:
             show_dir = ek(os.path.normpath, fullShowPath)
         else:
-            show_dir = ek(os.path.join, rootDir, helpers.sanitizeFileName(show_name))
+            show_dir = ek(os.path.join, rootDir, sanitize_filename(show_name))
 
         # blanket policy - if the dir exists you should have used "add existing show" numbnuts
         if ek(os.path.isdir, show_dir) and not fullShowPath:
@@ -2823,7 +2829,7 @@ class Manage(Home, WebRoot):
     def showEpisodeStatuses(indexer_id, whichStatus):
         status_list = [int(whichStatus)]
         if status_list[0] == SNATCHED:
-            status_list = Quality.SNATCHED + Quality.SNATCHED_PROPER
+            status_list = Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST
 
         myDB = db.DBConnection()
         cur_show_results = myDB.select(
@@ -2888,7 +2894,7 @@ class Manage(Home, WebRoot):
     def changeEpisodeStatuses(self, oldStatus, newStatus, *args, **kwargs):
         status_list = [int(oldStatus)]
         if status_list[0] == SNATCHED:
-            status_list = Quality.SNATCHED + Quality.SNATCHED_PROPER
+            status_list = Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST
 
         to_change = {}
 
@@ -3049,6 +3055,8 @@ class Manage(Home, WebRoot):
             epCounts[Overview.GOOD] = 0
             epCounts[Overview.UNAIRED] = 0
             epCounts[Overview.SNATCHED] = 0
+            epCounts[Overview.SNATCHED_PROPER] = 0
+            epCounts[Overview.SNATCHED_BEST] = 0
 
             sqlResults = myDB.select(
                 "SELECT status, season, episode, name, airdate FROM tv_episodes WHERE tv_episodes.showid in (SELECT tv_shows.indexer_id FROM tv_shows WHERE tv_shows.indexer_id = ? AND paused = 0) ORDER BY tv_episodes.season DESC, tv_episodes.episode DESC",
@@ -4914,7 +4922,7 @@ class ConfigSubtitles(Config):
                         controller="config", action="subtitles")
 
     def saveSubtitles(self, use_subtitles=None, subtitles_plugins=None, subtitles_languages=None, subtitles_dir=None,
-                      service_order=None, subtitles_history=None, subtitles_finder_frequency=None,
+                      service_order=None, subtitles_history=None, subtitles_finder_frequency=None, subtitles_download_in_pp=None,
                       subtitles_multi=None, embedded_subtitles_all=None, subtitles_extra_scripts=None, subtitles_hearing_impaired=None,
                       addic7ed_user=None, addic7ed_pass=None, legendastv_user=None, legendastv_pass=None, opensubtitles_user=None, opensubtitles_pass=None):
 
@@ -4929,6 +4937,7 @@ class ConfigSubtitles(Config):
         sickbeard.EMBEDDED_SUBTITLES_ALL = config.checkbox_to_value(embedded_subtitles_all)
         sickbeard.SUBTITLES_HEARING_IMPAIRED = config.checkbox_to_value(subtitles_hearing_impaired)
         sickbeard.SUBTITLES_MULTI = config.checkbox_to_value(subtitles_multi)
+        sickbeard.SUBTITLES_DOWNLOAD_IN_PP = config.checkbox_to_value(subtitles_download_in_pp)
         sickbeard.SUBTITLES_EXTRA_SCRIPTS = [x.strip() for x in subtitles_extra_scripts.split('|') if x.strip()]
 
         # Subtitles services
@@ -5097,7 +5106,10 @@ class ErrorLogs(WebRoot):
             'SHOWUPDATER': u'Show Updater',
             'CHECKVERSION': u'Check Version',
             'SHOWQUEUE': u'Show Queue',
-            'SEARCHQUEUE': u'Search Queue',
+            'SEARCHQUEUE': u'Search Queue (All)',
+            'SEARCHQUEUE-DAILY-SEARCH': u'Search Queue (Daily Searcher)',
+            'SEARCHQUEUE-BACKLOG': u'Search Queue (Backlog)',
+            'SEARCHQUEUE-MANUAL': u'Search Queue (Manual)',
             'FINDPROPERS': u'Find Propers',
             'POSTPROCESSER': u'Postprocesser',
             'FINDSUBTITLES': u'Find Subtitles',
diff --git a/sickrage/helper/common.py b/sickrage/helper/common.py
index e33a796a17c1bef65842b5978e2e2897c5bd06d1..f63111cbd498632dc5dac61c7c5b42e60a1fbed5 100644
--- a/sickrage/helper/common.py
+++ b/sickrage/helper/common.py
@@ -16,6 +16,9 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+import re
+import sickbeard
+
 dateFormat = '%Y-%m-%d'
 dateTimeFormat = '%Y-%m-%d %H:%M:%S'
 media_extensions = [
@@ -24,3 +27,109 @@ media_extensions = [
 ]
 subtitle_extensions = ['ass', 'idx', 'srt', 'ssa', 'sub']
 timeFormat = '%A %I:%M %p'
+
+
+def is_sync_file(filename):
+    """
+    Check if the provided ``filename`` is a sync file, based on its name.
+    :param filename: The filename to check
+    :return: ``True`` if the ``filename`` is a sync file, ``False`` otherwise
+    """
+
+    if isinstance(filename, (str, unicode)):
+        extension = filename.rpartition('.')[2].lower()
+
+        return extension in sickbeard.SYNC_FILES.split(',') or filename.startswith('.syncthing')
+
+    return False
+
+
+def is_torrent_or_nzb_file(filename):
+    """
+    Check if the provided ``filename`` is a NZB file or a torrent file, based on its extension.
+    :param filename: The filename to check
+    :return: ``True`` if the ``filename`` is a NZB file or a torrent file, ``False`` otherwise
+    """
+
+    if not isinstance(filename, (str, unicode)):
+        return False
+
+    return filename.rpartition('.')[2].lower() in ['nzb', 'torrent']
+
+
+def pretty_file_size(size):
+    """
+    Return a human readable representation of the provided ``size``.
+    :param size: The size to convert
+    :return: The converted size
+    """
+
+    if isinstance(size, str) and size.isdigit():
+        size = float(size)
+
+    if not isinstance(size, (int, long, float)):
+        return ''
+
+    remaining_size = size
+
+    for unit in ['B', 'KB', 'MB', 'GB', 'TB', 'PB']:
+        if remaining_size < 1024.:
+            return '%3.2f %s' % (remaining_size, unit)
+
+        remaining_size /= 1024.
+
+    return size
+
+
+def remove_extension(filename):
+    """
+    Remove the extension of the provided ``filename``.
+    The extension is only removed if it is in `sickrage.helper.common.media_extensions` or ['nzb', 'torrent'].
+    :param filename: The filename from which we want to remove the extension
+    :return: The ``filename`` without its extension.
+    """
+
+    if isinstance(filename, (str, unicode)) and '.' in filename:
+        # pylint: disable=W0612
+        basename, separator, extension = filename.rpartition('.')  # @UnusedVariable
+
+        if basename and extension.lower() in ['nzb', 'torrent'] + media_extensions:
+            return basename
+
+    return filename
+
+
+def replace_extension(filename, new_extension):
+    """
+    Replace the extension of the provided ``filename`` with a new extension.
+    :param filename: The filename for which we want to change the extension
+    :param new_extension: The new extension to apply on the ``filename``
+    :return: The ``filename`` with the new extension
+    """
+
+    if isinstance(filename, (str, unicode)) and '.' in filename:
+        # pylint: disable=W0612
+        basename, separator, extension = filename.rpartition('.')  # @UnusedVariable
+
+        if basename:
+            return '%s.%s' % (basename, new_extension)
+
+    return filename
+
+
+def sanitize_filename(filename):
+    """
+    Remove specific characters from the provided ``filename``.
+    :param filename: The filename to clean
+    :return: The ``filename``cleaned
+    """
+
+    if isinstance(filename, (str, unicode)):
+        filename = re.sub(r'[\\/\*]', '-', filename)
+        filename = re.sub(r'[:"<>|?]', '', filename)
+        filename = re.sub(ur'\u2122', '', filename)  # Trade Mark Sign
+        filename = filename.strip(' .')
+
+        return filename
+
+    return ''
diff --git a/sickrage/show/Show.py b/sickrage/show/Show.py
index a6824fc05054be5fdad8517d8cc0a644465bf02b..0634beb0175d985ffeb154750e812d9e5672d66c 100644
--- a/sickrage/show/Show.py
+++ b/sickrage/show/Show.py
@@ -60,7 +60,7 @@ class Show:
         today = str(date.today().toordinal())
 
         downloaded_status = Quality.DOWNLOADED + Quality.ARCHIVED
-        snatched_status = Quality.SNATCHED + Quality.SNATCHED_PROPER
+        snatched_status = Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST
         total_status = [SKIPPED, WANTED]
 
         results = db.select(
diff --git a/tests/all_tests.py b/tests/all_tests.py
index de388878e699e32834af523c5ecf68227e96410d..ca1533cfc9da4e89a6fb1b45c2f1fc89026b9402 100755
--- a/tests/all_tests.py
+++ b/tests/all_tests.py
@@ -18,49 +18,83 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+# pylint: disable=line-too-long
+
+"""
+Perform all tests in tests/
+"""
+
+
 import fnmatch
 import os
 import sys
 import unittest
 
-tests_dir = os.path.abspath(__file__)[:-len(os.path.basename(__file__))]
 
-sys.path.insert(1, os.path.join(tests_dir, '../lib'))
-sys.path.insert(1, os.path.join(tests_dir, '..'))
+TESTS_DIR = os.path.abspath(__file__)[:-len(os.path.basename(__file__))]
+
+sys.path.insert(1, os.path.join(TESTS_DIR, '../lib'))
+sys.path.insert(1, os.path.join(TESTS_DIR, '..'))
 
 
 class AllTests(unittest.TestCase):
+    """
+    Performs all tests in tests directory.
+
+    Methods
+        setUp
+        test_all
+        _get_module_strings
+        _get_test_files
+        _get_test_suites
+    """
     # Block issue_submitter_tests to avoid issue tracker spam on every build
-    blacklist = [tests_dir + 'all_tests.py', tests_dir + 'issue_submitter_tests.py', tests_dir + 'search_tests.py']
+    blacklist = [TESTS_DIR + 'all_tests.py', TESTS_DIR + 'issue_submitter_tests.py', TESTS_DIR + 'search_tests.py']
 
     def setUp(self):
+        """
+        Get all tests
+        """
         self.test_file_strings = self._get_test_files()
         self.module_strings = self._get_module_strings()
         self.suites = self._get_test_suites()
-        self.testSuite = unittest.TestSuite(self.suites)
+        self.test_suite = unittest.TestSuite(self.suites)
 
-    def testAll(self):
+    def test_all(self):
+        """
+        Perform all tests
+        """
         print "===================="
         print "STARTING - ALL TESTS"
         print "===================="
 
         for included_files in self.test_file_strings:
-            print "- " + included_files[len(tests_dir):-3]
+            print "- " + included_files[len(TESTS_DIR):-3]
 
-        text_runner = unittest.TextTestRunner().run(self.testSuite)
+        text_runner = unittest.TextTestRunner().run(self.test_suite)
         if not text_runner.wasSuccessful():
             sys.exit(-1)
 
     def _get_module_strings(self):
+        """
+        Convert the file names into module names
+
+        :return: all module names
+        """
         modules = []
         for file_string in self.test_file_strings:
-            modules.append(file_string[len(tests_dir):len(file_string) - 3].replace(os.sep, '.'))
+            modules.append(file_string[len(TESTS_DIR):len(file_string) - 3].replace(os.sep, '.'))
 
         return modules
 
     def _get_test_files(self):
+        """
+        Get the name of all the tests in the tests directory
+
+        :return: all file names that match
+        """
         matches = []
-        for root, _, file_names in os.walk(tests_dir):
+        for root, _, file_names in os.walk(TESTS_DIR):
             for filename in fnmatch.filter(file_names, '*_tests.py'):
                 filename_with_path = os.path.join(root, filename)
 
@@ -70,8 +104,12 @@ class AllTests(unittest.TestCase):
         return matches
 
     def _get_test_suites(self):
-        return [unittest.defaultTestLoader.loadTestsFromName(file_string) for file_string in self.module_strings]
+        """
+        Load all test suites
 
+        :return: all test suites from tests
+        """
+        return [unittest.defaultTestLoader.loadTestsFromName(file_string) for file_string in self.module_strings]
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/tests/common_tests.py b/tests/common_tests.py
index b0e6a1df03d3cb955f6a2afb0d9fe0b20d2dedbb..83a77e752553f881eefff862f6b292916ec5eaf9 100644
--- a/tests/common_tests.py
+++ b/tests/common_tests.py
@@ -2,8 +2,32 @@
 
 """
 Unit Tests for sickbeard/common.py
+
+Classes:
+    Quality
+        _getStatusStrings
+        combineQualities
+        splitQuality
+        nameQuality
+        sceneQuality
+        assumeQuality
+        qualityFromFileMeta
+        compositeStatus
+        qualityDownloaded
+        splitCompositeStatus
+        sceneQualityFromName
+        statusFromName
+    StatusStrings
+        statusStrings
+        __missing__
+        __contains__
+    OverView
+
 """
 
+# TODO: Implement skipped tests
+
+
 import sys
 import os.path
 import unittest
@@ -14,158 +38,216 @@ sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')
 from sickbeard import common
 
 
-class QualityTests(unittest.TestCase):
+class QualityStringTests(unittest.TestCase):
     """
-    Test Case for common.Quality
+    Test Case for strings in common.Quality
     """
+    # TODO: Add more test cases
+    test_cases = {
+        'sd_tv': ["Test.Show.S01E02.PDTV.XViD-GROUP",
+                  "Test.Show.S01E02.PDTV.x264-GROUP",
+                  "Test.Show.S01E02.HDTV.XViD-GROUP",
+                  "Test.Show.S01E02.HDTV.x264-GROUP",
+                  "Test.Show.S01E02.DSR.XViD-GROUP",
+                  "Test.Show.S01E02.DSR.x264-GROUP",
+                  "Test.Show.S01E02.TVRip.XViD-GROUP",
+                  "Test.Show.S01E02.TVRip.x264-GROUP",
+                  "Test.Show.S01E02.WEBRip.XViD-GROUP",
+                  "Test.Show.S01E02.WEBRip.x264-GROUP",
+                  "Test.Show.S01E02.WEB-DL.x264-GROUP",
+                  "Test.Show.S01E02.WEB-DL.AAC2.0.H.264-GROUP",
+                  "Test.Show.S01E02 WEB-DL H 264-GROUP",
+                  "Test.Show.S01E02_WEB-DL_H_264-GROUP",
+                  "Test.Show.S01E02.WEB-DL.AAC2.0.H264-GROUP", ],
+        'sd_dvd': ["Test.Show.S01E02.DVDRiP.XViD-GROUP",
+                   "Test.Show.S01E02.DVDRiP.DiVX-GROUP",
+                   "Test.Show.S01E02.DVDRiP.x264-GROUP",
+                   "Test.Show.S01E02.DVDRip.WS.XViD-GROUP",
+                   "Test.Show.S01E02.DVDRip.WS.DiVX-GROUP",
+                   "Test.Show.S01E02.DVDRip.WS.x264-GROUP",
+                   "Test.Show.S01E02.BDRIP.XViD-GROUP",
+                   "Test.Show.S01E02.BDRIP.DiVX-GROUP",
+                   "Test.Show.S01E02.BDRIP.x264-GROUP",
+                   "Test.Show.S01E02.BDRIP.WS.XViD-GROUP",
+                   "Test.Show.S01E02.BDRIP.WS.DiVX-GROUP",
+                   "Test.Show.S01E02.BDRIP.WS.x264-GROUP", ],
+        'hd_tv': ["Test.Show.S01E02.720p.HDTV.x264-GROUP",
+                  "Test.Show.S01E02.HR.WS.PDTV.x264-GROUP", ],
+        'raw_hd_tv': ["Test.Show.S01E02.720p.HDTV.DD5.1.MPEG2-GROUP",
+                      "Test.Show.S01E02.1080i.HDTV.DD2.0.MPEG2-GROUP",
+                      "Test.Show.S01E02.1080i.HDTV.H.264.DD2.0-GROUP",
+                      "Test Show - S01E02 - 1080i HDTV MPA1.0 H.264 - GROUP",
+                      "Test.Show.S01E02.1080i.HDTV.DD.5.1.h264-GROUP", ],
+        'full_hd_tv': ["Test.Show.S01E02.1080p.HDTV.x264-GROUP", ],
+        'hd_web_dl': ["Test.Show.S01E02.720p.WEB-DL-GROUP",
+                      "Test.Show.S01E02.720p.WEBRip-GROUP",
+                      "Test.Show.S01E02.WEBRip.720p.H.264.AAC.2.0-GROUP",
+                      "Test.Show.S01E02.720p.WEB-DL.AAC2.0.H.264-GROUP",
+                      "Test Show S01E02 720p WEB-DL AAC2 0 H 264-GROUP",
+                      "Test_Show.S01E02_720p_WEB-DL_AAC2.0_H264-GROUP",
+                      "Test.Show.S01E02.720p.WEB-DL.AAC2.0.H264-GROUP",
+                      "Test.Show.S01E02.720p.iTunes.Rip.H264.AAC-GROUP", ],
+        'full_hd_web_dl': ["Test.Show.S01E02.1080p.WEB-DL-GROUP",
+                           "Test.Show.S01E02.1080p.WEBRip-GROUP",
+                           "Test.Show.S01E02.WEBRip.1080p.H.264.AAC.2.0-GROUP",
+                           "Test.Show.S01E02.WEBRip.1080p.H264.AAC.2.0-GROUP",
+                           "Test.Show.S01E02.1080p.iTunes.H.264.AAC-GROUP",
+                           "Test Show S01E02 1080p iTunes H 264 AAC-GROUP",
+                           "Test_Show_S01E02_1080p_iTunes_H_264_AAC-GROUP", ],
+        'hd_bluray': ["Test.Show.S01E02.720p.BluRay.x264-GROUP",
+                      "Test.Show.S01E02.720p.HDDVD.x264-GROUP", ],
+        'full_hd_bluray': ["Test.Show.S01E02.1080p.BluRay.x264-GROUP",
+                           "Test.Show.S01E02.1080p.HDDVD.x264-GROUP", ],
+        'unknown': ["Test.Show.S01E02-SiCKBEARD", ],
+    }
 
-    # TODO: repack / proper ? air-by-date ? season rip? multi-ep?
-
-    def test_SDTV(self):
+    def test_sd_tv(self):
         """
         Test SDTV against nameQuality
         """
-        tests = [
-            "Test.Show.S01E02.PDTV.XViD-GROUP",
-            "Test.Show.S01E02.PDTV.x264-GROUP",
-            "Test.Show.S01E02.HDTV.XViD-GROUP",
-            "Test.Show.S01E02.HDTV.x264-GROUP",
-            "Test.Show.S01E02.DSR.XViD-GROUP",
-            "Test.Show.S01E02.DSR.x264-GROUP",
-            "Test.Show.S01E02.TVRip.XViD-GROUP",
-            "Test.Show.S01E02.TVRip.x264-GROUP",
-            "Test.Show.S01E02.WEBRip.XViD-GROUP",
-            "Test.Show.S01E02.WEBRip.x264-GROUP",
-            "Test.Show.S01E02.WEB-DL.x264-GROUP",
-            "Test.Show.S01E02.WEB-DL.AAC2.0.H.264-GROUP",
-            "Test.Show.S01E02 WEB-DL H 264-GROUP",
-            "Test.Show.S01E02_WEB-DL_H_264-GROUP",
-            "Test.Show.S01E02.WEB-DL.AAC2.0.H264-GROUP",
-        ]
-        for test in tests:
-            self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality(test))
+        cur_test = 'sd_tv'
+        cur_qual = common.Quality.SDTV
+
+        for name, tests in self.test_cases.items():
+            for test in tests:
+                if name == cur_test:
+                    self.assertEqual(cur_qual, common.Quality.nameQuality(test))
+                else:
+                    self.assertNotEqual(cur_qual, common.Quality.nameQuality(test))
 
-    def test_SDDVD(self):
+    def test_sd_dvd(self):
         """
         Test SDDVD against nameQuality
         """
-        tests = [
-            "Test.Show.S01E02.DVDRiP.XViD-GROUP",
-            "Test.Show.S01E02.DVDRiP.DiVX-GROUP",
-            "Test.Show.S01E02.DVDRiP.x264-GROUP",
-            "Test.Show.S01E02.DVDRip.WS.XViD-GROUP",
-            "Test.Show.S01E02.DVDRip.WS.DiVX-GROUP",
-            "Test.Show.S01E02.DVDRip.WS.x264-GROUP",
-            "Test.Show.S01E02.BDRIP.XViD-GROUP",
-            "Test.Show.S01E02.BDRIP.DiVX-GROUP",
-            "Test.Show.S01E02.BDRIP.x264-GROUP",
-            "Test.Show.S01E02.BDRIP.WS.XViD-GROUP",
-            "Test.Show.S01E02.BDRIP.WS.DiVX-GROUP",
-            "Test.Show.S01E02.BDRIP.WS.x264-GROUP",
-        ]
-        for test in tests:
-            self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality(test))
+        cur_test = 'sd_dvd'
+        cur_qual = common.Quality.SDDVD
+
+        for name, tests in self.test_cases.items():
+            for test in tests:
+                if name == cur_test:
+                    self.assertEqual(cur_qual, common.Quality.nameQuality(test))
+                else:
+                    self.assertNotEqual(cur_qual, common.Quality.nameQuality(test))
 
-    def test_HDTV(self):
+    def test_hd_tv(self):
         """
         Test HDTV against nameQuality
         """
-        tests = [
-            "Test.Show.S01E02.720p.HDTV.x264-GROUP",
-            "Test.Show.S01E02.HR.WS.PDTV.x264-GROUP",
-        ]
-        for test in tests:
-            self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality(test))
+        cur_test = 'hd_tv'
+        cur_qual = common.Quality.HDTV
 
-    def test_RAWHDTV(self):
+        for name, tests in self.test_cases.items():
+            for test in tests:
+                if name == cur_test:
+                    self.assertEqual(cur_qual, common.Quality.nameQuality(test))
+                else:
+                    self.assertNotEqual(cur_qual, common.Quality.nameQuality(test))
+
+    def test_raw_hd_tv(self):
         """
         Test RAWHDTV against nameQuality
         """
-        tests = [
-            "Test.Show.S01E02.720p.HDTV.DD5.1.MPEG2-GROUP",
-            "Test.Show.S01E02.1080i.HDTV.DD2.0.MPEG2-GROUP",
-            "Test.Show.S01E02.1080i.HDTV.H.264.DD2.0-GROUP",
-            "Test Show - S01E02 - 1080i HDTV MPA1.0 H.264 - GROUP",
-            "Test.Show.S01E02.1080i.HDTV.DD.5.1.h264-GROUP",
-        ]
-        for test in tests:
-            self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality(test))
+        cur_test = 'raw_hd_tv'
+        cur_qual = common.Quality.RAWHDTV
+
+        for name, tests in self.test_cases.items():
+            for test in tests:
+                if name == cur_test:
+                    self.assertEqual(cur_qual, common.Quality.nameQuality(test))
+                else:
+                    self.assertNotEqual(cur_qual, common.Quality.nameQuality(test))
 
-    def test_FULLHDTV(self):
+    def test_full_hd_tv(self):
         """
         Test FULLHDTV against nameQuality
         """
-        tests = [
-            "Test.Show.S01E02.1080p.HDTV.x264-GROUP",
-        ]
-        for test in tests:
-            self.assertEqual(common.Quality.FULLHDTV, common.Quality.nameQuality(test))
+        cur_test = 'full_hd_tv'
+        cur_qual = common.Quality.FULLHDTV
 
-    def test_HDWEBDL(self):
+        for name, tests in self.test_cases.items():
+            for test in tests:
+                if name == cur_test:
+                    self.assertEqual(cur_qual, common.Quality.nameQuality(test))
+                else:
+                    self.assertNotEqual(cur_qual, common.Quality.nameQuality(test))
+
+    def test_hd_web_dl(self):
         """
         Test HDWEBDL against nameQuality
         """
-        tests = [
-            "Test.Show.S01E02.720p.WEB-DL-GROUP",
-            "Test.Show.S01E02.720p.WEBRip-GROUP",
-            "Test.Show.S01E02.WEBRip.720p.H.264.AAC.2.0-GROUP",
-            "Test.Show.S01E02.720p.WEB-DL.AAC2.0.H.264-GROUP",
-            "Test Show S01E02 720p WEB-DL AAC2 0 H 264-GROUP",
-            "Test_Show.S01E02_720p_WEB-DL_AAC2.0_H264-GROUP",
-            "Test.Show.S01E02.720p.WEB-DL.AAC2.0.H264-GROUP",
-            "Test.Show.S01E02.720p.iTunes.Rip.H264.AAC-GROUP",
-        ]
-        for test in tests:
-            self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality(test))
+        cur_test = 'hd_web_dl'
+        cur_qual = common.Quality.HDWEBDL
+
+        for name, tests in self.test_cases.items():
+            for test in tests:
+                if name == cur_test:
+                    self.assertEqual(cur_qual, common.Quality.nameQuality(test))
+                else:
+                    self.assertNotEqual(cur_qual, common.Quality.nameQuality(test))
 
-    def test_FULLHDWEBDL(self):
+    def test_full_hd_web_dl(self):
         """
         Test FULLHDWEBDL against nameQuality
         """
-        tests = [
-            "Test.Show.S01E02.1080p.WEB-DL-GROUP",
-            "Test.Show.S01E02.1080p.WEBRip-GROUP",
-            "Test.Show.S01E02.WEBRip.1080p.H.264.AAC.2.0-GROUP",
-            "Test.Show.S01E02.WEBRip.1080p.H264.AAC.2.0-GROUP",
-            "Test.Show.S01E02.1080p.iTunes.H.264.AAC-GROUP",
-            "Test Show S01E02 1080p iTunes H 264 AAC-GROUP",
-            "Test_Show_S01E02_1080p_iTunes_H_264_AAC-GROUP",
-        ]
-        for test in tests:
-            self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality(test))
+        cur_test = 'full_hd_web_dl'
+        cur_qual = common.Quality.FULLHDWEBDL
 
-    def test_HDBLURAY(self):
+        for name, tests in self.test_cases.items():
+            for test in tests:
+                if name == cur_test:
+                    self.assertEqual(cur_qual, common.Quality.nameQuality(test))
+                else:
+                    self.assertNotEqual(cur_qual, common.Quality.nameQuality(test))
+
+    def test_hd_bluray(self):
         """
         Test HDBLURAY against nameQuality
         """
-        tests = [
-            "Test.Show.S01E02.720p.BluRay.x264-GROUP",
-            "Test.Show.S01E02.720p.HDDVD.x264-GROUP",
-        ]
-        for test in tests:
-            self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality(test))
+        cur_test = 'hd_bluray'
+        cur_qual = common.Quality.HDBLURAY
+
+        for name, tests in self.test_cases.items():
+            for test in tests:
+                if name == cur_test:
+                    self.assertEqual(cur_qual, common.Quality.nameQuality(test))
+                else:
+                    self.assertNotEqual(cur_qual, common.Quality.nameQuality(test))
 
-    def test_FULLHDBLURAY(self):
+    def test_full_hd_bluray(self):
         """
         Test FULLHDBLURAY against nameQuality
         """
-        tests = [
-            "Test.Show.S01E02.1080p.BluRay.x264-GROUP",
-            "Test.Show.S01E02.1080p.HDDVD.x264-GROUP",
-        ]
-        for test in tests:
-            self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality(test))
+        cur_test = 'full_hd_bluray'
+        cur_qual = common.Quality.FULLHDBLURAY
+
+        for name, tests in self.test_cases.items():
+            for test in tests:
+                if name == cur_test:
+                    self.assertEqual(cur_qual, common.Quality.nameQuality(test))
+                else:
+                    self.assertNotEqual(cur_qual, common.Quality.nameQuality(test))
 
-    def test_UNKNOWN(self):
+    def test_unknown(self):
         """
         Test UNKNOWN against nameQuality
         """
-        tests = [
-            "Test.Show.S01E02-SiCKBEARD",
-        ]
-        for test in tests:
-            self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality(test))
+        cur_test = 'unknown'
+        cur_qual = common.Quality.UNKNOWN
+
+        for name, tests in self.test_cases.items():
+            for test in tests:
+                if name == cur_test:
+                    self.assertEqual(cur_qual, common.Quality.nameQuality(test))
+                else:
+                    self.assertNotEqual(cur_qual, common.Quality.nameQuality(test))
+
+
+class QualityTests(unittest.TestCase):
+    """
+    Test Case for common.Quality
+    """
 
+    # TODO: repack / proper ? air-by-date ? season rip? multi-ep?
     @unittest.expectedFailure
     # reverse parsing does not work
     def test_reverse_parsing(self):
@@ -189,8 +271,92 @@ class QualityTests(unittest.TestCase):
             self.assertEqual(quality, common.Quality.nameQuality(test),
                              (quality, common.Quality.nameQuality(test), test))
 
+    @unittest.skip('Not yet implemented')
+    def test_get_status_strings(self):
+        """
+        Test _getStatusStrings
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_combine_qualities(self):
+        """
+        Test combineQualities
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_split_quality(self):
+        """
+        Test splitQuality
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_name_quality(self):
+        """
+        Test nameQuality
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_scene_quality(self):
+        """
+        Test sceneQuality
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_assume_quality(self):
+        """
+        Test assumeQuality
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_quality_from_file_meta(self):
+        """
+        Test qualityFromFileMeta
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_composite_status(self):
+        """
+        Test compositeStatus
+        """
+        pass
 
-class StatusStringsTest(unittest.TestCase):
+    @unittest.skip('Not yet implemented')
+    def test_quality_downloaded(self):
+        """
+        Test qualityDownloaded
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_split_composite_status(self):
+        """
+        Test splitCompositeStatus
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_scene_quality_from_name(self):
+        """
+        Test sceneQualityFromName
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_status_from_name(self):
+        """
+        Test statusFromName
+        """
+        pass
+
+
+class StatusStringsTests(unittest.TestCase):
     """
     Test Case for common.StatusStrings
     """
@@ -242,13 +408,37 @@ class StatusStringsTest(unittest.TestCase):
                 status_strings[str(i)] = 1
             self.assertEqual(status_strings[i], 1)
 
+
+class OverviewTests(unittest.TestCase):
+    """
+    Test common.Overview
+    """
+    def test_overview_strings(self):
+        """
+        Test common.Overview.overviewStrings
+        """
+        overview = common.Overview()
+
+        self.assertEqual(overview.overviewStrings[overview.SKIPPED], "skipped")
+        self.assertEqual(overview.overviewStrings[overview.WANTED], "wanted")
+        self.assertEqual(overview.overviewStrings[overview.QUAL], "qual")
+        self.assertEqual(overview.overviewStrings[overview.GOOD], "good")
+        self.assertEqual(overview.overviewStrings[overview.UNAIRED], "unaired")
+        self.assertEqual(overview.overviewStrings[overview.SNATCHED], "snatched")
+
 if __name__ == '__main__':
     print "======================="
     print "STARTING - COMMON TESTS"
     print "======================="
 
-    suite = unittest.TestLoader().loadTestsFromTestCase(QualityTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(QualityStringTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(QualityTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(StatusStringsTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
 
-    suite = unittest.TestLoader().loadTestsFromTestCase(StatusStringsTest)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(OverviewTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
diff --git a/tests/config_tests.py b/tests/config_tests.py
index 36619ed1a7c0e1262df60da13cdb82069e0b3b3d..b396896919ec140558c9f4799f4f90d7770ba1f2 100644
--- a/tests/config_tests.py
+++ b/tests/config_tests.py
@@ -1,22 +1,308 @@
+# coding=utf-8
+"""
+Test sickbeard.config's classes and methods
+
+Classes:
+    ConfigMigrator
+        migrate_config
+        _migrate_v1
+        _name_to_pattern
+        _migrate_v2
+        _migrate_v3
+        _migrate_v4
+        _migrate_v5
+        _migrate_v6
+        _migrate_v7
+
+Methods
+    change_HTTPS_CERT
+    change_HTTPS_KEY
+    change_LOG_DIR
+    change_NZB_DIR
+    change_TORRENT_DIR
+    change_TV_DOWNLOAD_DIR
+    change_AUTOPOSTPROCESSER_FREQUENCY
+    change_DAILYSEARCH_FREQUENCY
+    change_BACKLOG_FREQUENCY
+    change_UPDATE_FREQUENCY
+    change_SHOWUPDATE_HOUR
+    change_SUBTITLES_FINDER_FREQUENCY
+    change_VERSION_NOTIFY
+    change_DOWNLOAD_PROPERS
+    change_USE_TRAKT
+    change_USE_SUBTITLES
+    change_PROCESS_AUTOMATICALLY
+    CheckSection
+    checkbox_to_value
+    clean_host
+    clean_hosts
+    clean_url
+    to_int
+    minimax
+    check_setting_int
+    check_setting_float
+    check_setting_str
+"""
+
+# pylint: disable=line-too-long
+
 import sys
 import os.path
+import unittest
+import logging
+from collections import namedtuple
 
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
-import unittest
-
 from sickbeard import config
 
-class QualityTests(unittest.TestCase):
+
+class ConfigTestBasic(unittest.TestCase):
+    """
+    Test basic methods in sickbeard.config
+    """
+    @unittest.skip('Test not implemented')
+    def test_check_section(self):
+        """
+        Test check_section
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_checkbox_to_value(self):
+        """
+        Test checkbox_to_value
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_clean_host(self):
+        """
+        Test clean_host
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_clean_hosts(self):
+        """
+        Test clean_hosts
+        """
+        pass
 
     def test_clean_url(self):
-        self.assertEqual(config.clean_url("https://subdomain.domain.tld/endpoint"), "https://subdomain.domain.tld/endpoint")
-        self.assertEqual(config.clean_url("google.com/xml.rpc"), "http://google.com/xml.rpc")
-        self.assertEqual(config.clean_url("google.com"), "http://google.com/")
-        self.assertEqual(config.clean_url("http://www.example.com/folder/"), "http://www.example.com/folder/")
-        self.assertEqual(config.clean_url("scgi:///home/user/.config/path/socket"), "scgi:///home/user/.config/path/socket")
+        """
+        Test cleaning of urls
+        """
+        log = logging.getLogger(__name__)
+        test = namedtuple('test', 'expected_result dirty clean')
+
+        url_tests = [
+            test(True, "https://subdomain.domain.tld/endpoint", "https://subdomain.domain.tld/endpoint"),  # does not add a final /
+            test(True, "http://www.example.com/folder/", "http://www.example.com/folder/"),  # does not remove the final /
+            test(True, "google.com/xml.rpc", "http://google.com/xml.rpc"),  # add scheme if missing
+            test(True, "google.com", "http://google.com/"),  # add scheme if missing and final / if its just the domain
+            test(True, "scgi:///home/user/.config/path/socket", "scgi:///home/user/.config/path/socket"),  # scgi identified as scheme
+            test(True, None, ''),  # None URL returns empty string
+            test(False, "https://subdomain.domain.tld/endpoint", "http://subdomain.domain.tld/endpoint"),  # does not change schemes from https to http
+            test(False, "http://subdomain.domain.tld/endpoint", "https://subdomain.domain.tld/endpoint"),  # ...or vice versa
+            test(False, "google.com/xml.rpc", "google.com/xml.rpc"),  # scheme is always added
+            test(False, "google.com", "https://google.com/"),  # does not default to https
+            test(False, "http://www.example.com/folder/", "http://www.example.com/folder"),  # does not strip final /
+            test(False, "scgi:///home/user/.config/path/socket", "scgi:///home/user/.config/path/socket/"),  # does not add a final /
+            test(AttributeError, 1, 1),  # None URL returns empty string
+        ]
+
+        for test_url in url_tests:
+            if issubclass(type(Exception), type(test_url.expected_result)):
+                with self.assertRaises(test_url.expected_result):
+                    self.assertEqual(config.clean_url(test_url.dirty), test_url.clean)
+            elif test_url.expected_result is True:
+                self.assertEqual(config.clean_url(test_url.dirty), test_url.clean)
+            elif not test_url.expected_result is False:
+                self.assertNotEqual(config.clean_url(test_url.dirty), test_url.clean)
+            else:
+                log.error('Test not defined for %s', test_url)
+
+    @unittest.skip('Test not implemented')
+    def test_to_int(self):
+        """
+        Test to_int
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_mini_max(self):
+        """
+        Test mini_max
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_check_setting_int(self):
+        """
+        Test check_setting_int
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_check_setting_float(self):
+        """
+        Test check_setting_float
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_check_setting_str(self):
+        """
+        Test check_setting_str
+        """
+        pass
+
+
+class ConfigTestChanges(unittest.TestCase):
+    """
+    Test change methods in sickbeard.config
+    """
+    @unittest.skip('Test not implemented')
+    def test_change_https_cert(self):
+        """
+        Test change_https_cert
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_https_key(self):
+        """
+        Test change_https_key
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_log_dir(self):
+        """
+        Test change_log_dir
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_nzb_dir(self):
+        """
+        Test change_nzb_dir
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_torrent_dir(self):
+        """
+        Test change_torrent_dir
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_tv_download_dir(self):
+        """
+        Test change_tv_download_dir
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_auto_pp_freq(self):
+        """
+        Test change_auto_pp_freq
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_daily_search_freq(self):
+        """
+        Test change_daily_search_freq
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_backlog_freq(self):
+        """
+        Test change_backlog_freq
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_update_freq(self):
+        """
+        Test change_update_freq
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_show_update_hour(self):
+        """
+        Test change_show_update_hour
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_sub_finder_freq(self):
+        """
+        Test change_sub_finder_freq
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_version_notify(self):
+        """
+        Test change_version_notify
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_download_propers(self):
+        """
+        Test change_download_propers
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_use_trakt(self):
+        """
+        Test change_use_trakt
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_use_subtitles(self):
+        """
+        Test change_use_subtitles
+        """
+        pass
+
+    @unittest.skip('Test not implemented')
+    def test_change_process_auto(self):
+        """
+        Test change_process_auto
+        """
+        pass
+
+
+class ConfigTestMigrator(unittest.TestCase):
+    """
+    Test the sickbeard.config.ConfigMigrator class
+    """
+    @unittest.skip('Not yet implemented')
+    def test_config_migrator(self):
+        """
+        Test config_migrator
+        """
+        pass
+
 
 if __name__ == '__main__':
-    suite = unittest.TestLoader().loadTestsFromTestCase(QualityTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    logging.basicConfig(stream=sys.stderr)
+    logging.getLogger(__name__).setLevel(logging.DEBUG)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(ConfigTestBasic)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(ConfigTestChanges)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(ConfigTestMigrator)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
diff --git a/tests/encoding_tests.py b/tests/encoding_tests.py
index fb67ccef49f4da13e3ab06f59b3c6c7759c213e6..b6d042f4aa37dfb0e7b7b18dd256b6ed6167b2ed 100644
--- a/tests/encoding_tests.py
+++ b/tests/encoding_tests.py
@@ -1,22 +1,34 @@
 # coding=utf-8
 
-import sys, os.path
+"""
+Test encoding
+"""
 
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+# pylint: disable=line-too-long
 
+import sys
+import os.path
 import locale
 import unittest
 
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
 import sickbeard
-from sickbeard.helpers import sanitizeFileName
+from sickrage.helper.common import sanitize_filename
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 
 
 class EncodingTests(unittest.TestCase):
+    """
+    Test encodings
+    """
     def test_encoding(self):
-        rootDir = 'C:\\Temp\\TV'
+        """
+        Test encoding
+        """
+        root_dir = 'C:\\Temp\\TV'
         strings = [u'Les Enfants De La T\xe9l\xe9', u'RT� One']
 
         sickbeard.SYS_ENCODING = None
@@ -31,17 +43,18 @@ class EncodingTests(unittest.TestCase):
         if not sickbeard.SYS_ENCODING or sickbeard.SYS_ENCODING in ('ANSI_X3.4-1968', 'US-ASCII', 'ASCII'):
             sickbeard.SYS_ENCODING = 'UTF-8'
 
-        for s in strings:
+        for test in strings:
             try:
-                show_dir = ek(os.path.join, rootDir, sanitizeFileName(s))
+                show_dir = ek(os.path.join, root_dir, sanitize_filename(test))
                 self.assertTrue(isinstance(show_dir, unicode))
-            except Exception, e:
-                ex(e)
+            except Exception as error:  # pylint: disable=broad-except
+                ex(error)
 
 if __name__ == "__main__":
     print "=================="
     print "STARTING - ENCODING TESTS"
     print "=================="
     print "######################################################################"
-    suite = unittest.TestLoader().loadTestsFromTestCase(EncodingTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(EncodingTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
diff --git a/tests/feedparser_tests.py b/tests/feedparser_tests.py
index 5ef68544a27c83fafc8a4ee19876544a94092613..701c23a421edfb8c09f558a02878be9596a20b31 100644
--- a/tests/feedparser_tests.py
+++ b/tests/feedparser_tests.py
@@ -1,29 +1,41 @@
-import sys, os.path
+# coding=utf-8
 
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+"""
+Test Feed Parser
+"""
 
+import sys
+import os.path
 import unittest
 
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
 from sickbeard.providers.womble import provider as womble
 
+
 class FeedParserTests(unittest.TestCase):
-    # pylint: disable=W0212
+    """
+    Test feed parser
+    """
     def test_womble(self):
+        """
+        Test womble
+        """
         result = womble.cache.getRSSFeed('http://newshost.co.za/rss/?sec=tv-sd&fr=false')
         self.assertTrue('entries' in result)
         self.assertTrue('feed' in result)
         for item in result['entries'] or []:
-            title, url = womble._get_title_and_url(item)
+            title, url = womble._get_title_and_url(item)     # pylint: disable=protected-access
             self.assertTrue(title and url)
 
 if __name__ == "__main__":
     print "=================="
-    print "STARTING - FEEDPARSER TESTS"
+    print "STARTING - FEED PARSER TESTS"
     print "=================="
     print "######################################################################"
-    suite = unittest.TestLoader().loadTestsFromTestCase(FeedParserTests)
-    testresults = unittest.TextTestRunner(verbosity=2).run(suite)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(FeedParserTests)
+    TEST_RESULTS = unittest.TextTestRunner(verbosity=2).run(SUITE)
 
     # Return 0 if successful, 1 if there was a failure
-    sys.exit(not testresults.wasSuccessful())
+    sys.exit(not TEST_RESULTS.wasSuccessful())
diff --git a/tests/helpers_tests.py b/tests/helpers_tests.py
index f51b3896c3ff196b6ca7e35ed4a53ede28e6d7a2..87b9e1c5dc9c1fbc9b3a4b4c365542d4120cca6b 100755
--- a/tests/helpers_tests.py
+++ b/tests/helpers_tests.py
@@ -1,22 +1,93 @@
 #!/usr/bin/env python2.7
-"""
-Author: Dustyn Gibson <miigotu@gmail.com>
-URL: http://github.com/SiCKRAGETV/SickRage
-
-This file is part of SickRage.
-
-SickRage is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+# Author: Dustyn Gibson <miigotu@gmail.com>
+# URL: http://github.com/SiCKRAGETV/SickRage
+#
+# This file is part of SickRage.
+#
+# SickRage is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# SickRage is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-SickRage is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+"""
+Test sickbeard.helpers
 
-You should have received a copy of the GNU General Public License
-along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
+Methods:
+    isValidLanguage
+    fixGlob
+    indentXML
+    remove_non_release_groups
+    isMediaFile
+    isRarFile
+    isBeingWritten
+    remove_file_failed
+    findCertainShow
+    makeDir
+    searchDBForShow
+    searchIndexerForShowID
+    listMediaFiles
+    copyFile
+    moveFile
+    link
+    hardlinkFile
+    symlink
+    moveAndSymlinkFile
+    make_dirs
+    rename_ep_file
+    delete_empty_folders
+    fileBitFilter
+    chmodAsParent
+    fixSetGroupID
+    is_anime_in_show_list
+    update_anime_support
+    get_absolute_number_from_season_and_episode
+    get_all_episodes_from_absolute_number
+    sanitizeSceneName
+    arithmeticEval
+    create_https_certificates
+    backupVersionedFile
+    restoreVersionedFile
+    tryInt
+    md5_for_file
+    get_lan_ip
+    check_url
+    anon_url
+    encrypt
+    decrypt
+    full_sanitizeSceneName
+    _check_against_names
+    get_show
+    is_hidden_folder
+    real_path
+    validateShow
+    set_up_anidb_connection
+    makeZip
+    extractZip
+    backupConfigZip
+    restoreConfigZip
+    mapIndexersToShow
+    touchFile
+    _getTempDir
+    codeDescription
+    _setUpSession
+    getURL
+    download_file
+    get_size
+    generateApiKey
+    remove_article
+    generateCookieSecret
+    verify_freespace
+    pretty_time_delta
+    isFileLocked
+    getDiskSpaceUsage
 """
 
 import sys
@@ -27,12 +98,13 @@ sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')
 
 import unittest
 
-from sickbeard.helpers import remove_non_release_groups
+from sickbeard.helpers import isValidLanguage, remove_non_release_groups
+from babelfish import language  # pylint: disable=import-error
 
-test_result = 'Show.Name.S01E01.HDTV.x264-RLSGROUP'
-test_cases = {
+TEST_RESULT = 'Show.Name.S01E01.HDTV.x264-RLSGROUP'
+TEST_CASES = {
     'removewords': [
-        test_result,
+        TEST_RESULT,
         'Show.Name.S01E01.HDTV.x264-RLSGROUP[cttv]',
         'Show.Name.S01E01.HDTV.x264-RLSGROUP.RiPSaLoT',
         'Show.Name.S01E01.HDTV.x264-RLSGROUP[GloDLS]',
@@ -71,25 +143,591 @@ test_cases = {
     ]
 }
 
+
 class HelpersTests(unittest.TestCase):
+    """
+    Test using test generator
+    """
     def __init__(self, *args, **kwargs):
+        """
+        Initialize test
+        """
         super(HelpersTests, self).__init__(*args, **kwargs)
 
+
 def test_generator(test_strings):
+    """
+    Generate tests from test strings
+
+    :param test_strings: to generate tests from
+    :return: test
+    """
     def _test(self):
+        """
+        Generate tests
+        :param self:
+        :return: test to run
+        """
         for test_string in test_strings:
-            self.assertEqual(remove_non_release_groups(test_string), test_result)
+            self.assertEqual(remove_non_release_groups(test_string), TEST_RESULT)
     return _test
 
+
+class HelpersZipTests(unittest.TestCase):
+    """
+    Test zip methods
+    """
+    @unittest.skip('Not yet implemented')
+    def test_make_zip(self):
+        """
+        Test makeZip
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_extract_zip(self):
+        """
+        Test extractZip
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_backup_config_zip(self):
+        """
+        Test backupConfigZip
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_restore_config_zip(self):
+        """
+        Test restoreConfigZip
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_is_rar_file(self):
+        """
+        Test isRarFile
+        """
+        pass
+
+
+class HelpersDirectoryTests(unittest.TestCase):
+    """
+    Test directory methods
+    """
+    @unittest.skip('Not yet implemented')
+    def test_make_dirs(self):
+        """
+        Test make_dirs
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_delete_empty_folders(self):
+        """
+        Test delete_empty_folders
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_make_dir(self):
+        """
+        Test makeDir
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_get_temp_dir(self):
+        """
+        Test _getTempDir
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_is_hidden_folder(self):
+        """
+        Test is_hidden_folder
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_real_path(self):
+        """
+        Test real_path
+        """
+        pass
+
+
+class HelpersFileTests(unittest.TestCase):
+    """
+    Test file helpers
+    """
+    @unittest.skip('Not yet implemented')
+    def test_is_media_file(self):
+        """
+        Test isMediaFile
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_is_file_locked(self):
+        """
+        Test isFileLocked
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_is_being_written(self):
+        """
+        Test isBeingWritten
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_remove_file_failed(self):
+        """
+        Test remove_file_failed
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_list_media_files(self):
+        """
+        Test listMediaFiles
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_copy_file(self):
+        """
+        Test copyFile
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_move_file(self):
+        """
+        Test moveFile
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_rename_ep_file(self):
+        """
+        Test rename_ep_file
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_file_bit_filter(self):
+        """
+        Test fileBitFilter
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_chmod_as_parent(self):
+        """
+        Test chmodAsParent
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_backup_versioned_file(self):
+        """
+        Test backupVersionedFile
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_restore_versioned_file(self):
+        """
+        Test restoreVersionedFile
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_verify_free_space(self):
+        """
+        Test verify_freespace
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_get_disk_space_usage(self):
+        """
+        Test getDiskSpaceUsage
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_download_file(self):
+        """
+        Test download_file
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_get_size(self):
+        """
+        Test get_size
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_md5_for_file(self):
+        """
+        Test md5_for_file
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_touch_file(self):
+        """
+        Test touchFile
+        """
+        pass
+
+
+class HelpersFileLinksTests(unittest.TestCase):
+    """
+    Test sym and hard links
+    """
+    @unittest.skip('Not yet implemented')
+    def test_link(self):
+        """
+        Test link
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_hardlink_file(self):
+        """
+        Test hardlinkFile
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_symlink(self):
+        """
+        Test symlink
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_move_and_symlink_file(self):
+        """
+        Test moveAndSymlinkFile
+        """
+        pass
+
+
+class HelpersEncryptionTests(unittest.TestCase):
+    """
+    Test encryption and decryption
+    """
+    @unittest.skip('Not yet implemented')
+    def test_create_https_certificates(self):
+        """
+        Test create_https_certificates
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_encrypt(self):
+        """
+        Test encrypt
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_decrypt(self):
+        """
+        Test decrypt
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_generate_cookie_secret(self):
+        """
+        Test generateCookieSecret
+        """
+        pass
+
+
+class HelpersShowTests(unittest.TestCase):
+    """
+    Test show methods
+    """
+    @unittest.skip('Not yet implemented')
+    def test_find_certain_show(self):
+        """
+        Test findCertainShow
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_search_db_for_show(self):
+        """
+        Test searchDBForShow
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_search_indexer_for_show_id(self):
+        """
+        Test searchIndexerForShowID
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_is_anime_in_show_list(self):
+        """
+        Test is_anime_in_show_list
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_check_against_names(self):
+        """
+        Test _check_against_names
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_get_show(self):
+        """
+        Test get_show
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_validate_show(self):
+        """
+        Test validateShow
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_map_indexers_to_show(self):
+        """
+        Test mapIndexersToShow
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_get_abs_no_from_s_and_e(self):
+        """
+        Test get_absolute_number_from_season_and_episode
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_get_all_eps_from_abs_no(self):
+        """
+        Test get_all_episodes_from_absolute_number
+        """
+        pass
+
+
+class HelpersConnectionTests(unittest.TestCase):
+    """
+    Test connections
+    """
+    @unittest.skip('Not yet implemented')
+    def test_get_lan_ip(self):
+        """
+        Test get_lan_ip
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_check_url(self):
+        """
+        Test check_url
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_anon_url(self):
+        """
+        Test anon_url
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_set_up_anidb_connection(self):
+        """
+        Test set_up_anidb_connection
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_set_up_session(self):
+        """
+        Test _setUpSession
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_get_url(self):
+        """
+        Test getURL
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_generate_api_key(self):
+        """
+        Test generateApiKey
+        """
+        pass
+
+
+class HelpersMiscTests(unittest.TestCase):
+    """
+    Test misc helper methods
+    """
+    @unittest.expectedFailure
+    def test_is_valid_language(self):
+        # TODO: Determine why this fails and at such a high failure %
+        """
+        Test isValidLanguage
+        """
+        exception_count = 0
+        total = 0
+        for lang in language.LANGUAGES:
+            total += 1
+            try:
+                self.assertTrue(isValidLanguage(lang), lang)
+            except NameError:
+                exception_count += 1
+            except Exception as error:
+                raise error
+        if exception_count > 0:
+            raise Exception('Language failure ratio: %s [%s/%s]' %
+                            (100.0 * exception_count/total, exception_count, total))
+
+    @unittest.skip('Not yet implemented')
+    def test_fix_glob(self):
+        """
+        Test fixGlob
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_indent_xml(self):
+        """
+        Test indentXML
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_remove_non_release_groups(self):
+        """
+        Test remove_non_release_groups
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_fix_set_group_id(self):
+        """
+        Test fixSetGroupID
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_update_anime_support(self):
+        """
+        Test update_anime_support
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_sanitize_scene_name(self):
+        """
+        Test sanitizeSceneName
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_arithmetic_eval(self):
+        """
+        Test arithmeticEval
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_try_int(self):
+        """
+        Test tryInt
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_full_sanitize_scene_name(self):
+        """
+        Test full_sanitizeSceneName
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_code_description(self):
+        """
+        Test codeDescription
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_remove_article(self):
+        """
+        Test remove_article
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_pretty_time_delta(self):
+        """
+        Test pretty_time_delta
+        """
+        pass
+
+
 if __name__ == '__main__':
     print "=================="
     print "STARTING - Helpers TESTS"
     print "=================="
     print "######################################################################"
-    for name, test_data in test_cases.items():
+    for name, test_data in TEST_CASES.items():
         test_name = 'test_%s' % name
         test = test_generator(test_data)
         setattr(HelpersTests, test_name, test)
 
-    suite = unittest.TestLoader().loadTestsFromTestCase(HelpersTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(HelpersTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(HelpersConnectionTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(HelpersDirectoryTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(HelpersEncryptionTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(HelpersFileLinksTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(HelpersFileTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(HelpersMiscTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(HelpersShowTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(HelpersZipTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
diff --git a/tests/issue_submitter_tests.py b/tests/issue_submitter_tests.py
index ea8a7a495d1ba05bfdb6dd435442a4216014ffbe..79829f5b45821a1084e969a3e7e7f0422a4bad2c 100644
--- a/tests/issue_submitter_tests.py
+++ b/tests/issue_submitter_tests.py
@@ -17,29 +17,42 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+"""
+Test exception logging
+"""
 
-import sys, os.path
+import sys
+import os.path
+import unittest
 
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
-import unittest
-
 from sickbeard import logger
 from sickrage.helper.exceptions import ex
 
-def error():
+
+def exception_generator():
+    """
+    Dummy function to raise a fake exception and log it
+    """
     try:
         raise Exception('FAKE EXCEPTION')
-    except Exception as e:
-        logger.log(u"FAKE ERROR: " + ex(e), logger.ERROR)
-        logger.submit_errors()
+    except Exception as error:
+        logger.log(u"FAKE ERROR: " + ex(error), logger.ERROR)  # pylint: disable=no-member
+        logger.submit_errors()  # pylint: disable=no-member
         raise
 
 
 class IssueSubmitterBasicTests(unittest.TestCase):
+    """
+    Tests logging of exceptions
+    """
     def test_submitter(self):
-        self.assertRaises(Exception, error)
+        """
+        Test that an exception is raised
+        """
+        self.assertRaises(Exception, exception_generator)
 
 
 if __name__ == "__main__":
@@ -47,5 +60,6 @@ if __name__ == "__main__":
     print "STARTING - ISSUE SUBMITTER TESTS"
     print "=================="
     print "######################################################################"
-    suite = unittest.TestLoader().loadTestsFromTestCase(IssueSubmitterBasicTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(IssueSubmitterBasicTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
diff --git a/tests/name_parser_tests.py b/tests/name_parser_tests.py
index 7154d75bc039fb796ee9db79c02421cee6c85e46..50293a9078039849bb8b8a4ddb0cb57c0e838987 100644
--- a/tests/name_parser_tests.py
+++ b/tests/name_parser_tests.py
@@ -1,12 +1,18 @@
-import sys, os.path
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+"""
+Test name parsing
+"""
+
+# pylint: disable=line-too-long
 
+import sys
+import os.path
 import datetime
 import unittest
 
-from tests import test_lib as test
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
+from tests import test_lib as test
 import sickbeard
 from sickbeard import tv
 from sickbeard.name_parser import parser
@@ -15,7 +21,7 @@ sickbeard.SYS_ENCODING = 'UTF-8'
 
 DEBUG = VERBOSE = False
 
-simple_test_cases = {
+SIMPLE_TEST_CASES = {
     'standard': {
         'Mr.Show.Name.S01E02.Source.Quality.Etc-Group': parser.ParseResult(None, 'Mr Show Name', 1, [2], 'Source.Quality.Etc', 'Group'),
         'Show.Name.S01E02': parser.ParseResult(None, 'Show Name', 1, [2]),
@@ -115,7 +121,7 @@ simple_test_cases = {
     },
 }
 
-combination_test_cases = [
+COMBINATION_TEST_CASES = [
     ('/test/path/to/Season 02/03 - Ep Name.avi',
      parser.ParseResult(None, None, 2, [3], 'Ep Name'),
      ['no_season', 'season_only']),
@@ -149,18 +155,20 @@ combination_test_cases = [
      ['no_season', 'season_only']),
 ]
 
-unicode_test_cases = [
+UNICODE_TEST_CASES = [
     (u'The.Big.Bang.Theory.2x07.The.Panty.Pi\xf1ata.Polarization.720p.HDTV.x264.AC3-SHELDON.mkv',
      parser.ParseResult(None, 'The.Big.Bang.Theory', 2, [7], u'The.Panty.Pi\xf1ata.Polarization.720p.HDTV.x264.AC3', 'SHELDON')),
     ('The.Big.Bang.Theory.2x07.The.Panty.Pi\xc3\xb1ata.Polarization.720p.HDTV.x264.AC3-SHELDON.mkv',
      parser.ParseResult(None, 'The.Big.Bang.Theory', 2, [7], u'The.Panty.Pi\xf1ata.Polarization.720p.HDTV.x264.AC3', 'SHELDON'))
 ]
 
-failure_cases = ['7sins-jfcs01e09-720p-bluray-x264']
+FAILURE_CASES = ['7sins-jfcs01e09-720p-bluray-x264']
 
 
 class UnicodeTests(test.SickbeardTestDBCase):
-
+    """
+    Test unicode
+    """
     def __init__(self, something):
         super(UnicodeTests, self).__init__(something)
         super(UnicodeTests, self).setUp()
@@ -168,24 +176,43 @@ class UnicodeTests(test.SickbeardTestDBCase):
         self.show.name = "The Big Bang Theory"
 
     def _test_unicode(self, name, result):
-        np = parser.NameParser(True, showObj=self.show)
-        parse_result = np.parse(name)
+        """
+        Test unicode
+
+        :param name:
+        :param result:
+        :return:
+        """
+        name_parser = parser.NameParser(True, showObj=self.show)
+        parse_result = name_parser.parse(name)
 
         # this shouldn't raise an exception
         repr(str(parse_result))
         self.assertEqual(parse_result.extra_info, result.extra_info)
 
     def test_unicode(self):
-        for (name, result) in unicode_test_cases:
+        """
+        Test unicode
+        """
+        for (name, result) in UNICODE_TEST_CASES:
             self._test_unicode(name, result)
 
-class FailureCaseTests(test.SickbeardTestDBCase):
 
+class FailureCaseTests(test.SickbeardTestDBCase):
+    """
+    Test cases that should fail
+    """
     @staticmethod
     def _test_name(name):
-        np = parser.NameParser(True)
+        """
+        Test name
+
+        :param name:
+        :return:
+        """
+        name_parser = parser.NameParser(True)
         try:
-            parse_result = np.parse(name)
+            parse_result = name_parser.parse(name)
         except (parser.InvalidNameException, parser.InvalidShowException):
             return True
 
@@ -194,21 +221,36 @@ class FailureCaseTests(test.SickbeardTestDBCase):
         return False
 
     def test_failures(self):
-        for name in failure_cases:
+        """
+        Test failures
+        """
+        for name in FAILURE_CASES:
             self.assertTrue(self._test_name(name))
 
+
 class ComboTests(test.SickbeardTestDBCase):
+    """
+    Perform combination tests
+    """
 
     def _test_combo(self, name, result, which_regexes):
+        """
+        Perform combination test
+
+        :param name:
+        :param result:
+        :param which_regexes:
+        :return:
+        """
 
         if VERBOSE:
             print
             print 'Testing', name
 
-        np = parser.NameParser(True)
+        name_parser = parser.NameParser(True)
 
         try:
-            test_result = np.parse(name)
+            test_result = name_parser.parse(name)
         except parser.InvalidShowException:
             return False
 
@@ -216,50 +258,63 @@ class ComboTests(test.SickbeardTestDBCase):
             print test_result, test_result.which_regex
             print result, which_regexes
 
-
         self.assertEqual(test_result, result)
         for cur_regex in which_regexes:
             self.assertTrue(cur_regex in test_result.which_regex)
         self.assertEqual(len(which_regexes), len(test_result.which_regex))
 
     def test_combos(self):
-
-        for (name, result, which_regexes) in combination_test_cases:
+        """
+        Perform combination tests
+        """
+        for (name, result, which_regexes) in COMBINATION_TEST_CASES:
             # Normalise the paths. Converts UNIX-style paths into Windows-style
             # paths when test is run on Windows.
             self._test_combo(os.path.normpath(name), result, which_regexes)
 
-class BasicTests(test.SickbeardTestDBCase):
 
+class BasicTests(test.SickbeardTestDBCase):
+    """
+    Basic name parsing tests
+    """
     def __init__(self, something):
         super(BasicTests, self).__init__(something)
         super(BasicTests, self).setUp()
         self.show = tv.TVShow(1, 1, 'en')
 
-    def _test_names(self, np, section, transform=None, verbose=False):
+    def _test_names(self, name_parser, section, transform=None, verbose=False):
+        """
+        Performs a test
+
+        :param name_parser: to use for test
+        :param section:
+        :param transform:
+        :param verbose:
+        :return:
+        """
 
         if VERBOSE or verbose:
             print
             print 'Running', section, 'tests'
-        for cur_test_base in simple_test_cases[section]:
+        for cur_test_base in SIMPLE_TEST_CASES[section]:
             if transform:
                 cur_test = transform(cur_test_base)
-                np.file_name = cur_test
+                name_parser.file_name = cur_test
             else:
                 cur_test = cur_test_base
             if VERBOSE or verbose:
                 print 'Testing', cur_test
 
-            result = simple_test_cases[section][cur_test_base]
+            result = SIMPLE_TEST_CASES[section][cur_test_base]
 
             self.show.name = result.series_name if result else None
-            np.showObj = self.show
+            name_parser.showObj = self.show
             if not result:
-                self.assertRaises(parser.InvalidNameException, np.parse, cur_test)
+                self.assertRaises(parser.InvalidNameException, name_parser.parse, cur_test)
                 return
             else:
                 result.which_regex = [section]
-                test_result = np.parse(cur_test)
+                test_result = name_parser.parse(cur_test)
 
             if DEBUG or verbose:
                 print 'air_by_date:', test_result.is_air_by_date, 'air_date:', test_result.air_date
@@ -270,109 +325,238 @@ class BasicTests(test.SickbeardTestDBCase):
             self.assertEqual(str(test_result), str(result))
 
     def test_standard_names(self):
-        np = parser.NameParser(True)
-        self._test_names(np, 'standard')
-
-    def test_standard_repeat_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'standard_repeat')
-
-    def test_fov_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'fov')
-
-    def test_fov_repeat_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'fov_repeat')
-
-    #def test_bare_names(self):
-    #    np = parser.NameParser(False)
-    #    self._test_names(np, 'bare')
-
-    def test_stupid_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'stupid')
-
-    #def test_no_season_names(self):
-    #    np = parser.NameParser(False)
-    #    self._test_names(np, 'no_season')
-
-    def test_no_season_general_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'no_season_general')
-
-    def test_no_season_multi_ep_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'no_season_multi_ep')
-
-    def test_season_only_names(self):
-        np = parser.NameParser(False)
-        self._test_names(np, 'season_only')
-
-    #def test_scene_date_format_names(self):
-    #    np = parser.NameParser(False)
-    #    self._test_names(np, 'scene_date_format')
+        """
+        Test standard names
+        """
+        name_parser = parser.NameParser(True)
+        self._test_names(name_parser, 'standard')
 
     def test_standard_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'standard', lambda x: x + '.avi')
+        """
+        Test standard file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'standard', lambda x: x + '.avi')
+
+    def test_standard_repeat_names(self):
+        """
+        Test standard repeat names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'standard_repeat')
 
     def test_standard_repeat_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'standard_repeat', lambda x: x + '.avi')
+        """
+        Test standard repeat file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'standard_repeat', lambda x: x + '.avi')
+
+    def test_fov_names(self):
+        """
+        Test fov names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'fov')
 
     def test_fov_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'fov', lambda x: x + '.avi')
+        """
+        Test fov file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'fov', lambda x: x + '.avi')
+
+    def test_fov_repeat_names(self):
+        """
+        Test fov repeat names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'fov_repeat')
 
     def test_fov_repeat_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'fov_repeat', lambda x: x + '.avi')
+        """
+        Test fov repeat file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'fov_repeat', lambda x: x + '.avi')
 
-    #def test_bare_file_names(self):
-    #    np = parser.NameParser()
-    #    self._test_names(np, 'bare', lambda x: x + '.avi')
+    def test_stupid_names(self):
+        """
+        Test stupid names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'stupid')
 
     def test_stupid_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'stupid', lambda x: x + '.avi')
+        """
+        Test stupid file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'stupid', lambda x: x + '.avi')
+
+    def test_no_s_general_names(self):
+        """
+        Test no season general names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'no_season_general')
+
+    def test_no_s_general_file_names(self):
+        """
+        Test no season general file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'no_season_general', lambda x: x + '.avi')
+
+    def test_no_s_multi_ep_names(self):
+        """
+        Test no season multi episode names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'no_season_multi_ep')
+
+    def test_no_s_multi_ep_file_names(self):
+        """
+        Test no season multi episode file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'no_season_multi_ep', lambda x: x + '.avi')
+
+    def test_s_only_names(self):
+        """
+        Test season only names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'season_only')
+
+    def test_s_only_file_names(self):
+        """
+        Test season only file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'season_only', lambda x: x + '.avi')
+
+
+# TODO: Make these work or document why they shouldn't
+class BasicFailedTests(test.SickbeardTestDBCase):
+    """
+    Basic tests that currently fail
+    """
+    def __init__(self, something):
+        super(BasicFailedTests, self).__init__(something)
+        super(BasicFailedTests, self).setUp()
+        self.show = tv.TVShow(1, 1, 'en')
 
-    #def test_no_season_file_names(self):
-    #    np = parser.NameParser()
-    #    self._test_names(np, 'no_season', lambda x: x + '.avi')
+    def _test_names(self, name_parser, section, transform=None, verbose=False):
+        """
+        Performs a test
 
-    def test_no_season_general_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'no_season_general', lambda x: x + '.avi')
+        :param name_parser: to use for test
+        :param section:
+        :param transform:
+        :param verbose:
+        :return:
+        """
+        if VERBOSE or verbose:
+            print
+            print 'Running', section, 'tests'
+        for cur_test_base in SIMPLE_TEST_CASES[section]:
+            if transform:
+                cur_test = transform(cur_test_base)
+                name_parser.file_name = cur_test
+            else:
+                cur_test = cur_test_base
+            if VERBOSE or verbose:
+                print 'Testing', cur_test
 
-    def test_no_season_multi_ep_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'no_season_multi_ep', lambda x: x + '.avi')
+            result = SIMPLE_TEST_CASES[section][cur_test_base]
 
-    def test_season_only_file_names(self):
-        np = parser.NameParser()
-        self._test_names(np, 'season_only', lambda x: x + '.avi')
+            self.show.name = result.series_name if result else None
+            name_parser.showObj = self.show
+            if not result:
+                self.assertRaises(parser.InvalidNameException, name_parser.parse, cur_test)
+                return
+            else:
+                result.which_regex = [section]
+                test_result = name_parser.parse(cur_test)
 
-    #def test_scene_date_format_file_names(self):
-    #    np = parser.NameParser()
-    #    self._test_names(np, 'scene_date_format', lambda x: x + '.avi')
+            if DEBUG or verbose:
+                print 'air_by_date:', test_result.is_air_by_date, 'air_date:', test_result.air_date
+                print 'anime:', test_result.is_anime, 'ab_episode_numbers:', test_result.ab_episode_numbers
+                print test_result
+                print result
+            self.assertEqual(test_result.which_regex, [section])
+            self.assertEqual(str(test_result), str(result))
 
+    @unittest.expectedFailure
+    def test_no_s_names(self):
+        """
+        Test no season names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'no_season')
+
+    @unittest.expectedFailure
+    def test_no_s_file_names(self):
+        """
+        Test no season file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'no_season', lambda x: x + '.avi')
+
+    @unittest.expectedFailure
+    def test_bare_names(self):
+        """
+        Test bare names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'bare')
+
+    @unittest.expectedFailure
+    def test_bare_file_names(self):
+        """
+        Test bare file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'bare', lambda x: x + '.avi')
+
+    @unittest.skip('Not yet implemented')
     def test_combination_names(self):
+        """
+        Test combination names
+        """
         pass
 
+    @unittest.skip('Not trying indexer')
+    def test_scene_date_fmt_names(self):
+        """
+        Test scene date format names
+        """
+        name_parser = parser.NameParser(False)
+        self._test_names(name_parser, 'scene_date_format')
+
+    @unittest.skip('Not trying indexer')
+    def test_scene_date_fmt_file_names(self):
+        """
+        Test scene date format file names
+        """
+        name_parser = parser.NameParser()
+        self._test_names(name_parser, 'scene_date_format', lambda x: x + '.avi')
+
+
 if __name__ == '__main__':
     if len(sys.argv) > 1:
-        suite = unittest.TestLoader().loadTestsFromName('name_parser_tests.BasicTests.test_'+sys.argv[1])
-        unittest.TextTestRunner(verbosity=2).run(suite)
+        SUITE = unittest.TestLoader().loadTestsFromName('name_parser_tests.BasicTests.test_'+sys.argv[1])
+        unittest.TextTestRunner(verbosity=2).run(SUITE)
     else:
-        suite = unittest.TestLoader().loadTestsFromTestCase(BasicTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+        SUITE = unittest.TestLoader().loadTestsFromTestCase(BasicTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
 
-    suite = unittest.TestLoader().loadTestsFromTestCase(ComboTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(ComboTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
 
-    suite = unittest.TestLoader().loadTestsFromTestCase(UnicodeTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(UnicodeTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
 
-    suite = unittest.TestLoader().loadTestsFromTestCase(FailureCaseTests)
-    unittest.TextTestRunner(verbosity=2).run(suite)
+    SUITE = unittest.TestLoader().loadTestsFromTestCase(FailureCaseTests)
+    unittest.TextTestRunner(verbosity=2).run(SUITE)
diff --git a/tests/notifier_tests.py b/tests/notifier_tests.py
index 04701f64d6349eda7ce52a4cb834f72a5277408f..b6b2b9d99bb3c096e66dd63429325838807c789a 100644
--- a/tests/notifier_tests.py
+++ b/tests/notifier_tests.py
@@ -20,16 +20,23 @@
 
 ###
 # As a test case, there are instances in which it is necessary to call protected members of
-# classes in order to test those classes.  Therefore:
-# pylint: disable=W0212
+# classes in order to test those classes.  Therefore we will be pylint disable protected-access
 ###
 
-import sys, os.path
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
-sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+# pylint: disable=line-too-long
+
+"""
+Test notifiers
+"""
+
 
+import sys
+import os.path
 import unittest
 
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
 import tests.test_lib as test
 
 from sickbeard import db
@@ -40,8 +47,11 @@ from sickbeard.notifiers.prowl import ProwlNotifier
 
 from sickrage.helper.encoding import ss
 
-class NotifierTests(test.SickbeardTestDBCase):
 
+class NotifierTests(test.SickbeardTestDBCase):  # pylint: disable=too-many-public-methods
+    """
+    Test notifiers
+    """
     @classmethod
     def setUpClass(cls):
         num_legacy_shows = 3
@@ -81,12 +91,22 @@ class NotifierTests(test.SickbeardTestDBCase):
             cls.shows.append(show)
 
     def setUp(self):
+        """
+        Set up tests
+        """
         self._debug_spew("\n\r")
 
-    #def test_boxcar(self):
-    #    pass
+    @unittest.skip('Not yet implemented')
+    def test_boxcar(self):
+        """
+        Test boxcar notifications
+        """
+        pass
 
     def test_email(self):
+        """
+        Test email notifications
+        """
         email_notifier = EmailNotifier()
 
         # Per-show-email notifications were added early on and utilized a different format than the other notifiers.
@@ -103,14 +123,13 @@ class NotifierTests(test.SickbeardTestDBCase):
             showid = self._get_showid_by_showname(show.name)
             Home.saveShowNotifyList(show=showid, emails=test_emails)
 
-
         # Now, iterate through all shows using the email list generation routines that are used in the notifier proper
         shows = self.legacy_shows+self.shows
         for show in shows:
             for episode in show.episodes:
-                ep_name = ss(episode._format_pattern('%SN - %Sx%0E - %EN - ')+episode.quality)
-                show_name = email_notifier._parseEp(ep_name)
-                recipients = email_notifier._generate_recipients(show_name)
+                ep_name = ss(episode._format_pattern('%SN - %Sx%0E - %EN - ')+episode.quality)  # pylint: disable=protected-access
+                show_name = email_notifier._parseEp(ep_name)  # pylint: disable=protected-access
+                recipients = email_notifier._generate_recipients(show_name)  # pylint: disable=protected-access
                 self._debug_spew("- Email Notifications for "+show.name+" (episode: "+episode.name+") will be sent to:")
                 for email in recipients:
                     self._debug_spew("-- "+email.strip())
@@ -118,34 +137,73 @@ class NotifierTests(test.SickbeardTestDBCase):
 
         return True
 
-    #def test_emby(self):
-    #    pass
-
-    #def test_freemobile(self):
-    #    pass
-
-    #def test_growl(self):
-    #    pass
-
-    #def test_kodi(self):
-    #    pass
-
-    #def test_libnotify(self):
-    #    pass
-
-    #def test_nma(self):
-    #    pass
-
-    #def test_nmj(self):
-    #    pass
-
-    #def test_nmjv2(self):
-    #    pass
-
-    #def test_plex(self):
-    #    pass
+    @unittest.skip('Not yet implemented')
+    def test_emby(self):
+        """
+        Test emby notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_freemobile(self):
+        """
+        Test freemobile notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_growl(self):
+        """
+        Test growl notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_kodi(self):
+        """
+        Test kodi notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_libnotify(self):
+        """
+        Test libnotify notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_nma(self):
+        """
+        Test nma notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_nmj(self):
+        """
+        Test nmj notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_nmjv2(self):
+        """
+        Test nmjv2 notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_plex(self):
+        """
+        Test plex notifications
+        """
+        pass
 
     def test_prowl(self):
+        """
+        Test prowl notifications
+        """
         prowl_notifier = ProwlNotifier()
 
         # Prowl per-show-notifications only utilize the new methodology for storage; therefore, the list of legacy_shows
@@ -159,9 +217,9 @@ class NotifierTests(test.SickbeardTestDBCase):
         # Now, iterate through all shows using the Prowl API generation routines that are used in the notifier proper
         for show in self.shows:
             for episode in show.episodes:
-                ep_name = ss(episode._format_pattern('%SN - %Sx%0E - %EN - ')+episode.quality)
-                show_name = prowl_notifier._parse_episode(ep_name)
-                recipients = prowl_notifier._generate_recipients(show_name)
+                ep_name = ss(episode._format_pattern('%SN - %Sx%0E - %EN - ')+episode.quality)  # pylint: disable=protected-access
+                show_name = prowl_notifier._parse_episode(ep_name)  # pylint: disable=protected-access
+                recipients = prowl_notifier._generate_recipients(show_name)  # pylint: disable=protected-access
                 self._debug_spew("- Prowl Notifications for "+show.name+" (episode: "+episode.name+") will be sent to:")
                 for api in recipients:
                     self._debug_spew("-- "+api.strip())
@@ -169,36 +227,80 @@ class NotifierTests(test.SickbeardTestDBCase):
 
         return True
 
-    #def test_pushalot(self):
-    #    pass
-
-    #def test_pushbullet(self):
-    #    pass
-
-    #def test_pushover(self):
-    #    pass
-
-    #def test_pytivo(self):
-    #    pass
-
-    #def test_synoindex(self):
-    #    pass
-
-    #def test_synologynotifier(self):
-    #    pass
-
-    #def test_trakt(self):
-    #    pass
-
-    #def test_tweet(self):
-    #    pass
+    @unittest.skip('Not yet implemented')
+    def test_pushalot(self):
+        """
+        Test pushalot notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_pushbullet(self):
+        """
+        Test pushbullet notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_pushover(self):
+        """
+        Test pushover notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_pytivo(self):
+        """
+        Test pytivo notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_synoindex(self):
+        """
+        Test synoindex notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_synologynotifier(self):
+        """
+        Test synologynotifier notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_trakt(self):
+        """
+        Test trakt notifications
+        """
+        pass
+
+    @unittest.skip('Not yet implemented')
+    def test_tweet(self):
+        """
+        Test tweet notifications
+        """
+        pass
 
     @staticmethod
     def _debug_spew(text):
+        """
+        Spew text notifications
+
+        :param text: to spew
+        :return:
+        """
         if __name__ == '__main__' and text is not None:
             print text
 
     def _get_showid_by_showname(self, showname):
+        """
+        Get show ID by show name
+
+        :param showname:
+        :return:
+        """
         if showname is not None:
             rows = self.mydb.select("SELECT show_id FROM tv_shows WHERE show_name = ?", [showname])
             if len(rows) == 1:
@@ -210,5 +312,6 @@ if __name__ == '__main__':
     print "STARTING - NOTIFIER TESTS"
     print "=================="
     print "######################################################################"
+
     SUITE = unittest.TestLoader().loadTestsFromTestCase(NotifierTests)
     unittest.TextTestRunner(verbosity=2).run(SUITE)
diff --git a/tests/numdict_tests.py b/tests/numdict_tests.py
index f2ed80c7b0cbf148fc2012676761a43b036208e2..4802550bf9ee0c8ccfd5eafb7c1980d198e1145f 100644
--- a/tests/numdict_tests.py
+++ b/tests/numdict_tests.py
@@ -4,6 +4,8 @@
 Unit Tests for sickbeard/numdict.py
 """
 
+# pylint: disable=line-too-long
+
 import sys
 import os.path
 import unittest
@@ -16,7 +18,7 @@ from sickbeard.numdict import NumDict
 PY3 = sys.version_info >= (3, )
 
 if PY3:
-    from collections import UserDict
+    from collections import UserDict  # pylint: disable=no-name-in-module
 else:
     from UserDict import UserDict
 
@@ -25,97 +27,97 @@ class NumDictTest(unittest.TestCase):
     """
     Test the NumDict class
     """
-    def test_constructors(self):
+    def test_constructors(self):  # pylint: disable=too-many-locals, too-many-statements
         """
         Test NumDict constructors
         """
         # dicts for testing
-        d0 = {}  # Empty dictionary
-        d1 = {1: 'Elephant'}  # Single numeric key
-        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
-        d3 = {'3': 'Aardvark'}  # Numeric string key
-        d4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
-        d5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
-        d6 = {1: None, '2': None}  # None as values
-        d7 = {None: 'Empty'}  # None as key
+        dict_0 = {}  # Empty dictionary
+        dict_1 = {1: 'Elephant'}  # Single numeric key
+        dict_2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        dict_3 = {'3': 'Aardvark'}  # Numeric string key
+        dict_4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
+        dict_5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
+        dict_6 = {1: None, '2': None}  # None as values
+        dict_7 = {None: 'Empty'}  # None as key
 
         # Construct NumDicts from dicts
-        n = NumDict()
-        n0 = NumDict(d0)
-        n1 = NumDict(d1)
-        n2 = NumDict(d2)
-        n3 = NumDict(d3)
-        n4 = NumDict(d4)
-        n5 = NumDict(d5)
-        n6 = NumDict(d6)
-        n7 = NumDict(d7)
+        num_dict = NumDict()
+        num_dict_0 = NumDict(dict_0)
+        num_dict_1 = NumDict(dict_1)
+        num_dict_2 = NumDict(dict_2)
+        num_dict_3 = NumDict(dict_3)
+        num_dict_4 = NumDict(dict_4)
+        num_dict_5 = NumDict(dict_5)
+        num_dict_6 = NumDict(dict_6)
+        num_dict_7 = NumDict(dict_7)
 
         # Most NumDicts from dicts should compare equal...
-        self.assertEqual(n, {})
-        self.assertEqual(n0, d0)
-        self.assertEqual(n1, d1)
-        self.assertEqual(n2, d2)
+        self.assertEqual(num_dict, {})
+        self.assertEqual(num_dict_0, dict_0)
+        self.assertEqual(num_dict_1, dict_1)
+        self.assertEqual(num_dict_2, dict_2)
 
         # ...however, numeric keys are not equal to numeric string keys...
-        self.assertNotEqual(n3, d3)
-        self.assertNotEqual(n4, d4)
-        self.assertNotEqual(n5, d5)
-        self.assertNotEqual(n6, d6)
+        self.assertNotEqual(num_dict_3, dict_3)
+        self.assertNotEqual(num_dict_4, dict_4)
+        self.assertNotEqual(num_dict_5, dict_5)
+        self.assertNotEqual(num_dict_6, dict_6)
 
         # ...but None keys work just fine
-        self.assertEqual(n7, d7)
+        self.assertEqual(num_dict_7, dict_7)
 
         # Construct dicts from NumDicts
-        dn = dict(n)
-        dn1 = dict(n1)
-        dn2 = dict(n2)
-        dn3 = dict(n3)
-        dn4 = dict(n4)
-        dn5 = dict(n5)
-        dn6 = dict(n6)
-        dn7 = dict(n7)
+        dict_from_num_dict = dict(num_dict)
+        dict_from_num_dict_1 = dict(num_dict_1)
+        dict_from_num_dict_2 = dict(num_dict_2)
+        dict_from_num_dict_3 = dict(num_dict_3)
+        dict_from_num_dict_4 = dict(num_dict_4)
+        dict_from_num_dict_5 = dict(num_dict_5)
+        dict_from_num_dict_6 = dict(num_dict_6)
+        dict_from_num_dict_7 = dict(num_dict_7)
 
         # All dicts from NumDicts should compare equal
-        self.assertEqual(n, dn)
-        self.assertEqual(n1, dn1)
-        self.assertEqual(n2, dn2)
-        self.assertEqual(n3, dn3)
-        self.assertEqual(n4, dn4)
-        self.assertEqual(n5, dn5)
-        self.assertEqual(n6, dn6)
-        self.assertEqual(n7, dn7)
+        self.assertEqual(num_dict, dict_from_num_dict)
+        self.assertEqual(num_dict_1, dict_from_num_dict_1)
+        self.assertEqual(num_dict_2, dict_from_num_dict_2)
+        self.assertEqual(num_dict_3, dict_from_num_dict_3)
+        self.assertEqual(num_dict_4, dict_from_num_dict_4)
+        self.assertEqual(num_dict_5, dict_from_num_dict_5)
+        self.assertEqual(num_dict_6, dict_from_num_dict_6)
+        self.assertEqual(num_dict_7, dict_from_num_dict_7)
 
         # Construct NumDicts from NumDicts
-        nn = NumDict(n)
-        nn0 = NumDict(n0)
-        nn1 = NumDict(n1)
-        nn2 = NumDict(n2)
-        nn3 = NumDict(n3)
-        nn4 = NumDict(n4)
-        nn5 = NumDict(n5)
-        nn6 = NumDict(n6)
-        nn7 = NumDict(n7)
+        num_dict_from_num_dict = NumDict(num_dict)
+        num_dict_from_num_dict_0 = NumDict(num_dict_0)
+        num_dict_from_num_dict_1 = NumDict(num_dict_1)
+        num_dict_from_num_dict_2 = NumDict(num_dict_2)
+        num_dict_from_num_dict_3 = NumDict(num_dict_3)
+        num_dict_from_num_dict_4 = NumDict(num_dict_4)
+        num_dict_from_num_dict_5 = NumDict(num_dict_5)
+        num_dict_from_num_dict_6 = NumDict(num_dict_6)
+        num_dict_from_num_dict_7 = NumDict(num_dict_7)
 
         # All NumDicts from NumDicts should compare equal
-        self.assertEqual(n, nn)
-        self.assertEqual(n0, nn0)
-        self.assertEqual(n1, nn1)
-        self.assertEqual(n2, nn2)
-        self.assertEqual(n3, nn3)
-        self.assertEqual(n4, nn4)
-        self.assertEqual(n5, nn5)
-        self.assertEqual(n6, nn6)
-        self.assertEqual(n7, nn7)
+        self.assertEqual(num_dict, num_dict_from_num_dict)
+        self.assertEqual(num_dict_0, num_dict_from_num_dict_0)
+        self.assertEqual(num_dict_1, num_dict_from_num_dict_1)
+        self.assertEqual(num_dict_2, num_dict_from_num_dict_2)
+        self.assertEqual(num_dict_3, num_dict_from_num_dict_3)
+        self.assertEqual(num_dict_4, num_dict_from_num_dict_4)
+        self.assertEqual(num_dict_5, num_dict_from_num_dict_5)
+        self.assertEqual(num_dict_6, num_dict_from_num_dict_6)
+        self.assertEqual(num_dict_7, num_dict_from_num_dict_7)
 
         # keyword arg constructor should fail
         with self.assertRaises(TypeError):
             NumDict(one=1, two=2)  # Raise TypeError since we can't have numeric keywords
 
         # item sequence constructors work fine...
-        self.assertEqual(NumDict([(1, 'Elephant'), (2, 'Mouse')]), dn2)
-        self.assertEqual(NumDict(dict=[(1, 'Elephant'), (2, 'Mouse')]), dn2)
-        self.assertEqual(NumDict([(1, 'Elephant'), ('2', 'Mouse')]), dn2)
-        self.assertEqual(NumDict(dict=[('1', 'Elephant'), (2, 'Mouse')]), dn2)
+        self.assertEqual(NumDict([(1, 'Elephant'), (2, 'Mouse')]), dict_from_num_dict_2)
+        self.assertEqual(NumDict(dict=[(1, 'Elephant'), (2, 'Mouse')]), dict_from_num_dict_2)
+        self.assertEqual(NumDict([(1, 'Elephant'), ('2', 'Mouse')]), dict_from_num_dict_2)
+        self.assertEqual(NumDict(dict=[('1', 'Elephant'), (2, 'Mouse')]), dict_from_num_dict_2)
 
         # ...unless you have a non-numeric key
         with self.assertRaises(TypeError):
@@ -128,39 +130,42 @@ class NumDictTest(unittest.TestCase):
             NumDict([(1, 'one'), (2, 'two')], two=3, five=4)
 
         # alternate constructors
-        d8 = {1: 'Echo', 2: 'Echo'}
-
-        self.assertEqual(NumDict.fromkeys('1 2'.split()), dn6)
-        self.assertEqual(NumDict().fromkeys('1 2'.split()), dn6)
-        self.assertEqual(NumDict.fromkeys('1 2'.split(), 'Echo'), d8)
-        self.assertEqual(NumDict().fromkeys('1 2'.split(), 'Echo'), d8)
-        self.assertTrue(n1.fromkeys('1 2'.split()) is not n1)
-        self.assertIsInstance(n1.fromkeys('1 2'.split()), NumDict)
-        self.assertIsInstance(n2.fromkeys('1 2'.split()), NumDict)
-        self.assertIsInstance(n3.fromkeys('1 2'.split()), NumDict)
-        self.assertIsInstance(n4.fromkeys('1 2'.split()), NumDict)
-
-    def test_repr(self):
+        dict_8 = {1: 'Echo', 2: 'Echo'}
+
+        self.assertEqual(NumDict.fromkeys('1 2'.split()), dict_from_num_dict_6)
+        self.assertEqual(NumDict().fromkeys('1 2'.split()), dict_from_num_dict_6)
+        self.assertEqual(NumDict.fromkeys('1 2'.split(), 'Echo'), dict_8)
+        self.assertEqual(NumDict().fromkeys('1 2'.split(), 'Echo'), dict_8)
+        self.assertTrue(num_dict_1.fromkeys('1 2'.split()) is not num_dict_1)
+        self.assertIsInstance(num_dict_1.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(num_dict_2.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(num_dict_3.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(num_dict_4.fromkeys('1 2'.split()), NumDict)
+
+    def test_repr(self):  # pylint: disable=too-many-locals
+        """
+        Test representation of NumDicts
+        """
         # dicts for testing
-        d0 = {}  # Empty dictionary
-        d1 = {1: 'Elephant'}  # Single numeric key
-        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
-        d3 = {'3': 'Aardvark'}  # Numeric string key
-        d4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
-        d5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
-        d6 = {1: None, '2': None}  # None as values
-        d7 = {None: 'Empty'}  # None as key
+        dict_0 = {}  # Empty dictionary
+        dict_1 = {1: 'Elephant'}  # Single numeric key
+        dict_2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        dict_3 = {'3': 'Aardvark'}  # Numeric string key
+        dict_4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
+        dict_5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
+        dict_6 = {1: None, '2': None}  # None as values
+        dict_7 = {None: 'Empty'}  # None as key
 
         #  Construct NumDicts from dicts
-        n = NumDict()
-        n0 = NumDict(d0)
-        n1 = NumDict(d1)
-        n2 = NumDict(d2)
-        n3 = NumDict(d3)
-        n4 = NumDict(d4)
-        n5 = NumDict(d5)
-        n6 = NumDict(d6)
-        n7 = NumDict(d7)
+        num_dict = NumDict()
+        num_dict_0 = NumDict(dict_0)
+        num_dict_1 = NumDict(dict_1)
+        num_dict_2 = NumDict(dict_2)
+        num_dict_3 = NumDict(dict_3)
+        num_dict_4 = NumDict(dict_4)
+        num_dict_5 = NumDict(dict_5)
+        num_dict_6 = NumDict(dict_6)
+        num_dict_7 = NumDict(dict_7)
 
         reps = (
             "{}",
@@ -174,137 +179,143 @@ class NumDictTest(unittest.TestCase):
         )
 
         # Most representations of NumDicts should compare equal to dicts...
-        self.assertEqual(str(n), str({}))
-        self.assertEqual(repr(n), repr({}))
-        self.assertIn(repr(n), reps)
+        self.assertEqual(str(num_dict), str({}))
+        self.assertEqual(repr(num_dict), repr({}))
+        self.assertIn(repr(num_dict), reps)
 
-        self.assertEqual(str(n0), str(d0))
-        self.assertEqual(repr(n0), repr(d0))
-        self.assertIn(repr(n0), reps)
+        self.assertEqual(str(num_dict_0), str(dict_0))
+        self.assertEqual(repr(num_dict_0), repr(dict_0))
+        self.assertIn(repr(num_dict_0), reps)
 
-        self.assertEqual(str(n1), str(d1))
-        self.assertEqual(repr(n1), repr(d1))
-        self.assertIn(repr(n1), reps)
+        self.assertEqual(str(num_dict_1), str(dict_1))
+        self.assertEqual(repr(num_dict_1), repr(dict_1))
+        self.assertIn(repr(num_dict_1), reps)
 
-        self.assertEqual(str(n2), str(d2))
-        self.assertEqual(repr(n2), repr(d2))
-        self.assertIn(repr(n2), reps)
+        self.assertEqual(str(num_dict_2), str(dict_2))
+        self.assertEqual(repr(num_dict_2), repr(dict_2))
+        self.assertIn(repr(num_dict_2), reps)
 
         # ...however, numeric keys are not equal to numeric string keys...
         # ...so the string representations for those are different...
-        self.assertNotEqual(str(n3), str(d3))
-        self.assertNotEqual(repr(n3), repr(d3))
-        self.assertNotIn(repr(n3), reps)
+        self.assertNotEqual(str(num_dict_3), str(dict_3))
+        self.assertNotEqual(repr(num_dict_3), repr(dict_3))
+        self.assertNotIn(repr(num_dict_3), reps)
 
-        self.assertNotEqual(str(n4), str(d4))
-        self.assertNotEqual(repr(n4), repr(d4))
-        self.assertNotIn(repr(n4), reps)
+        self.assertNotEqual(str(num_dict_4), str(dict_4))
+        self.assertNotEqual(repr(num_dict_4), repr(dict_4))
+        self.assertNotIn(repr(num_dict_4), reps)
 
-        self.assertNotEqual(str(n5), str(d5))
-        self.assertNotEqual(repr(n5), repr(d5))
-        self.assertNotIn(repr(n5), reps)
+        self.assertNotEqual(str(num_dict_5), str(dict_5))
+        self.assertNotEqual(repr(num_dict_5), repr(dict_5))
+        self.assertNotIn(repr(num_dict_5), reps)
 
-        self.assertNotEqual(str(n6), str(d6))
-        self.assertNotEqual(repr(n6), repr(d6))
-        self.assertNotIn(repr(n6), reps)
+        self.assertNotEqual(str(num_dict_6), str(dict_6))
+        self.assertNotEqual(repr(num_dict_6), repr(dict_6))
+        self.assertNotIn(repr(num_dict_6), reps)
 
         # ...but None keys work just fine
-        self.assertEqual(str(n7), str(d7))
-        self.assertEqual(repr(n7), repr(d7))
-        self.assertIn(repr(n7), reps)
+        self.assertEqual(str(num_dict_7), str(dict_7))
+        self.assertEqual(repr(num_dict_7), repr(dict_7))
+        self.assertIn(repr(num_dict_7), reps)
 
     def test_rich_comparison_and_len(self):
+        """
+        Test rich comparison and length
+        """
         # dicts for testing
-        d0 = {}  # Empty dictionary
-        d1 = {1: 'Elephant'}  # Single numeric key
-        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        dict_0 = {}  # Empty dictionary
+        dict_1 = {1: 'Elephant'}  # Single numeric key
+        dict_2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
 
         # Construct NumDicts from dicts
-        n = NumDict()
-        n0 = NumDict(d0)
-        n1 = NumDict(d1)
-        n2 = NumDict(d2)
+        num_dict = NumDict()
+        num_dict_0 = NumDict(dict_0)
+        num_dict_1 = NumDict(dict_1)
+        num_dict_2 = NumDict(dict_2)
 
         # Construct NumDicts from NumDicts
-        nn = NumDict(n)
-        nn0 = NumDict(n0)
-        nn1 = NumDict(n1)
-        nn2 = NumDict(n2)
+        num_dict_from_num_dict = NumDict(num_dict)
+        num_dict_from_num_dict_0 = NumDict(num_dict_0)
+        num_dict_from_num_dict_1 = NumDict(num_dict_1)
+        num_dict_from_num_dict_2 = NumDict(num_dict_2)
 
-        all_dicts = [d0, d1, d2, n, n0, n1, n2, nn, nn0, nn1, nn2]
-        for a in all_dicts:
-            for b in all_dicts:
-                self.assertEqual(a == b, len(a) == len(b))
+        all_dicts = [dict_0, dict_1, dict_2, num_dict, num_dict_0, num_dict_1, num_dict_2, num_dict_from_num_dict, num_dict_from_num_dict_0, num_dict_from_num_dict_1, num_dict_from_num_dict_2]
+        for val_a in all_dicts:
+            for val_b in all_dicts:
+                self.assertEqual(val_a == val_b, len(val_a) == len(val_b))
 
-    def test_dict_access_and_modification(self):
+    def test_dict_access_and_mod(self):  # pylint: disable=too-many-locals, too-many-statements
+        """
+        Test num dict access and modification
+        """
         # dicts for testing
-        d0 = {}  # Empty dictionary
-        d1 = {1: 'Elephant'}  # Single numeric key
-        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        dict_0 = {}  # Empty dictionary
+        dict_1 = {1: 'Elephant'}  # Single numeric key
+        dict_2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
 
         #  Construct NumDicts from dicts
-        n0 = NumDict()
-        n1 = NumDict(d1)
-        n2 = NumDict(d2)
+        num_dict_0 = NumDict()
+        num_dict_1 = NumDict(dict_1)
+        num_dict_2 = NumDict(dict_2)
 
         # test __getitem__
-        self.assertEqual(n2[1], 'Elephant')
+        self.assertEqual(num_dict_2[1], 'Elephant')
         with self.assertRaises(KeyError):
-            n1['Mouse']  # key is not numeric
+            _ = num_dict_1['Mouse']  # key is not numeric
         with self.assertRaises(KeyError):
-            n1.__getitem__('Mouse')  # key is not numeric
+            _ = num_dict_1.__getitem__('Mouse')  # key is not numeric
         with self.assertRaises(KeyError):
-            n1[None]  # key does not exist
+            _ = num_dict_1[None]  # key does not exist
         with self.assertRaises(KeyError):
-            n1.__getitem__(None)  # key does not exist
+            _ = num_dict_1.__getitem__(None)  # key does not exist
 
         # Test __setitem__
-        n3 = NumDict(n2)
-        self.assertEqual(n2, n3)
+        num_dict_3 = NumDict(num_dict_2)
+        self.assertEqual(num_dict_2, num_dict_3)
 
-        n3[2] = 'Frog'
-        self.assertNotEqual(n2, n3)
+        num_dict_3[2] = 'Frog'
+        self.assertNotEqual(num_dict_2, num_dict_3)
 
         # Check None keys and numeric key conversion
-        n3['3'] = 'Armadillo'
-        n3[None] = 'Cockroach'
+        num_dict_3['3'] = 'Armadillo'
+        num_dict_3[None] = 'Cockroach'
 
         # Check long ints
-        n3[12390809518259081208909880312] = 'Squid'
-        n3['12390809518259081208909880312'] = 'Octopus'
-        self.assertEqual(n3[12390809518259081208909880312], 'Octopus')
+        num_dict_3[12390809518259081208909880312] = 'Squid'
+        num_dict_3['12390809518259081208909880312'] = 'Octopus'
+        self.assertEqual(num_dict_3[12390809518259081208909880312], 'Octopus')
 
         with self.assertRaises(TypeError):
-            n3.__setitem__('Gorilla', 1)  # key is not numeric
+            num_dict_3.__setitem__('Gorilla', 1)  # key is not numeric
         with self.assertRaises(TypeError):
-            n3['Chimpanzee'] = 1  # key is not numeric
+            num_dict_3['Chimpanzee'] = 1  # key is not numeric
         with self.assertRaises(TypeError):
-            n3[(4, 1)] = 1  # key is not numeric
+            num_dict_3[(4, 1)] = 1  # key is not numeric
         with self.assertRaises(TypeError):
-            n3[[1, 3, 4]] = 1  # key is not numeric and is not hashable
+            num_dict_3[[1, 3, 4]] = 1  # key is not numeric and is not hashable
 
         # Test __delitem__
-        del n3[3]
-        del n3[None]
+        del num_dict_3[3]
+        del num_dict_3[None]
         with self.assertRaises(KeyError):
-            del n3[3]  # already deleted
+            del num_dict_3[3]  # already deleted
         with self.assertRaises(KeyError):
-            n3.__delitem__(3)  # already deleted
+            num_dict_3.__delitem__(3)  # already deleted
         with self.assertRaises(KeyError):
-            del n3['Mouse']  # key would not exist, since it is not numeric
+            del num_dict_3['Mouse']  # key would not exist, since it is not numeric
 
         # Test clear
-        n3.clear()
-        self.assertEqual(n3, {})
+        num_dict_3.clear()
+        self.assertEqual(num_dict_3, {})
 
         # Test copy()
-        n2a = d2.copy()
-        self.assertEqual(n2, n2a)
-        n2b = n2.copy()
-        self.assertEqual(n2b, n2)
-        n2c = UserDict({1: 'Elephant', 2: 'Mouse'})
-        n2d = n2c.copy()  # making a copy of a UserDict is special cased
-        self.assertEqual(n2c, n2d)
+        num_dict_2a = dict_2.copy()
+        self.assertEqual(num_dict_2, num_dict_2a)
+        num_dict_2b = num_dict_2.copy()
+        self.assertEqual(num_dict_2b, num_dict_2)
+        num_dict_2c = UserDict({1: 'Elephant', 2: 'Mouse'})
+        num_dict_2d = num_dict_2c.copy()  # making a copy of a UserDict is special cased
+        self.assertEqual(num_dict_2c, num_dict_2d)
 
         class MyNumDict(NumDict):
             """
@@ -316,131 +327,135 @@ class NumDictTest(unittest.TestCase):
                 """
                 print('MyNumDict:', self)
 
-        m2 = MyNumDict(n2)
-        m2a = m2.copy()
-        self.assertEqual(m2a, m2)
+        my_num_dict = MyNumDict(num_dict_2)
+        my_num_dict_a = my_num_dict.copy()
+        self.assertEqual(my_num_dict_a, my_num_dict)
 
-        m2[1] = 'Frog'
-        self.assertNotEqual(m2a, m2)
+        my_num_dict[1] = 'Frog'
+        self.assertNotEqual(my_num_dict_a, my_num_dict)
 
         # Test keys, items, values
-        self.assertEqual(sorted(n2.keys()), sorted(d2.keys()))
-        self.assertEqual(sorted(n2.items()), sorted(d2.items()))
-        self.assertEqual(sorted(n2.values()), sorted(d2.values()))
+        self.assertEqual(sorted(num_dict_2.keys()), sorted(dict_2.keys()))
+        self.assertEqual(sorted(num_dict_2.items()), sorted(dict_2.items()))
+        self.assertEqual(sorted(num_dict_2.values()), sorted(dict_2.values()))
 
         # Test "in".
-        for i in n2:
-            self.assertIn(i, n2)
-            self.assertEqual(i in n1, i in d1)
-            self.assertEqual(i in n0, i in d0)
+        for i in num_dict_2:
+            self.assertIn(i, num_dict_2)
+            self.assertEqual(i in num_dict_1, i in dict_1)
+            self.assertEqual(i in num_dict_0, i in dict_0)
 
-        self.assertFalse(None in n2)
-        self.assertEqual(None in n2, None in d2)
+        self.assertFalse(None in num_dict_2)
+        self.assertEqual(None in num_dict_2, None in dict_2)
 
-        d2[None] = 'Cow'
-        n2[None] = d2[None]
-        self.assertTrue(None in n2)
-        self.assertEqual(None in n2, None in d2)
+        dict_2[None] = 'Cow'
+        num_dict_2[None] = dict_2[None]
+        self.assertTrue(None in num_dict_2)
+        self.assertEqual(None in num_dict_2, None in dict_2)
 
-        self.assertEqual(n2.has_key(None), None in d2)
+        self.assertEqual(num_dict_2.has_key(None), None in dict_2)
         if not PY3:
-            self.assertEqual(n2.has_key(None), d2.has_key(None))
-        self.assertFalse('Penguin' in n2)
+            self.assertEqual(num_dict_2.has_key(None), dict_2.has_key(None))
+        self.assertFalse('Penguin' in num_dict_2)
 
         # Test update
-        t = NumDict()
-        t.update(d2)
-        self.assertEqual(t, n2)
+        test = NumDict()
+        test.update(dict_2)
+        self.assertEqual(test, num_dict_2)
 
         # Test get
-        for i in n2:
-            self.assertEqual(n2.get(i), n2[i])
-            self.assertEqual(n1.get(i), d1.get(i))
-            self.assertEqual(n0.get(i), d0.get(i))
+        for i in num_dict_2:
+            self.assertEqual(num_dict_2.get(i), num_dict_2[i])
+            self.assertEqual(num_dict_1.get(i), dict_1.get(i))
+            self.assertEqual(num_dict_0.get(i), dict_0.get(i))
 
         for i in ['purple', None, 12312301924091284, 23]:
-            self.assertEqual(n2.get(i), d2.get(i), i)
+            self.assertEqual(num_dict_2.get(i), dict_2.get(i), i)
 
         with self.assertRaises(AssertionError):
             i = '1'
-            self.assertEqual(n2.get(i), d2.get(i), i)  # d2 expects string key which does not exist
+            self.assertEqual(num_dict_2.get(i), dict_2.get(i), i)  # dict_2 expects string key which does not exist
 
         # Test "in" iteration.
-        n2b = n2
+        num_dict_2b = num_dict_2
         for i in range(20):
-            n2[i] = str(i)
-            n2b[str(i)] = str(i)
-        self.assertEqual(n2, n2b)
+            num_dict_2[i] = str(i)
+            num_dict_2b[str(i)] = str(i)
+        self.assertEqual(num_dict_2, num_dict_2b)
 
         ikeys = []
-        for k in n2:
+        for k in num_dict_2:
             ikeys.append(k)
-        self.assertEqual(set(ikeys), set(n2.keys()))
+        self.assertEqual(set(ikeys), set(num_dict_2.keys()))
 
         # Test setdefault
-        x = 1
-        t = NumDict()
-        self.assertEqual(t.setdefault(x, 42), 42)
-        self.assertEqual(t.setdefault(x, '42'), 42)
-        self.assertNotEqual(t.setdefault(x, 42), '42')
-        self.assertNotEqual(t.setdefault(x, '42'), '42')
-        self.assertIn(x, t)
-
-        self.assertEqual(t.setdefault(x, 23), 42)
-        self.assertEqual(t.setdefault(x, '23'), 42)
-        self.assertNotEqual(t.setdefault(x, 23), '42')
-        self.assertNotEqual(t.setdefault(x, '23'), '42')
-        self.assertIn(x, t)
+        val = 1
+        test = NumDict()
+        self.assertEqual(test.setdefault(val, 42), 42)
+        self.assertEqual(test.setdefault(val, '42'), 42)
+        self.assertNotEqual(test.setdefault(val, 42), '42')
+        self.assertNotEqual(test.setdefault(val, '42'), '42')
+        self.assertIn(val, test)
+
+        self.assertEqual(test.setdefault(val, 23), 42)
+        self.assertEqual(test.setdefault(val, '23'), 42)
+        self.assertNotEqual(test.setdefault(val, 23), '42')
+        self.assertNotEqual(test.setdefault(val, '23'), '42')
+        self.assertIn(val, test)
 
         # Test pop
-        x = 1
-        t = NumDict({x: 42})
-        self.assertEqual(t.pop(x), 42)
-        self.assertRaises(KeyError, t.pop, x)
-        self.assertEqual(t.pop(x, 1), 1)
-        t[x] = 42
-        self.assertEqual(t.pop(x, 1), 42)
+        val = 1
+        test = NumDict({val: 42})
+        self.assertEqual(test.pop(val), 42)
+        self.assertRaises(KeyError, test.pop, val)
+        self.assertEqual(test.pop(val, 1), 1)
+        test[val] = 42
+        self.assertEqual(test.pop(val, 1), 42)
 
         # Test popitem
-        x = 1
-        t = NumDict({x: 42})
-        self.assertEqual(t.popitem(), (x, 42))
-        self.assertRaises(KeyError, t.popitem)
+        val = 1
+        test = NumDict({val: 42})
+        self.assertEqual(test.popitem(), (val, 42))
+        self.assertRaises(KeyError, test.popitem)
 
     def test_missing(self):
+        """
+        Test missing keys
+        """
         # Make sure NumDict doesn't have a __missing__ method
         self.assertEqual(hasattr(NumDict, "__missing__"), False)
 
-        class D(NumDict):
+        class NumDictD(NumDict):
             """
             subclass defines __missing__ method returning a value
             """
-            def __missing__(self, key):
-                return 42
-
-        d = D({1: 2, 3: 4})
-        self.assertEqual(d[1], 2)
-        self.assertEqual(d[3], 4)
-        self.assertNotIn(2, d)
-        self.assertNotIn(2, d.keys())
-        self.assertEqual(d[2], 42)
-
-        class E(NumDict):
+            def __missing__(self, key):  # pylint: disable=no-self-use
+                key = 42
+                return key
+
+        num_dict_d = NumDictD({1: 2, 3: 4})
+        self.assertEqual(num_dict_d[1], 2)
+        self.assertEqual(num_dict_d[3], 4)
+        self.assertNotIn(2, num_dict_d)
+        self.assertNotIn(2, num_dict_d.keys())
+        self.assertEqual(num_dict_d[2], 42)
+
+        class NumDictE(NumDict):
             """
             subclass defines __missing__ method raising RuntimeError
             """
-            def __missing__(self, key):
+            def __missing__(self, key):  # pylint: disable=no-self-use
                 raise RuntimeError(key)
 
-        e = E()
+        num_dict_e = NumDictE()
         try:
-            e[42]
+            num_dict_e[42]
         except RuntimeError as err:
             self.assertEqual(err.args, (42,))
         else:
-            self.fail("e[42] didn't raise RuntimeError")
+            self.fail("num_dict_e[42] didn't raise RuntimeError")
 
-        class F(NumDict):
+        class NumDictF(NumDict):
             """
             subclass sets __missing__ instance variable (no effect)
             """
@@ -448,40 +463,43 @@ class NumDictTest(unittest.TestCase):
                 # An instance variable __missing__ should have no effect
                 self.__missing__ = lambda key: None
                 NumDict.__init__(self)
-        f = F()
+        num_dict_f = NumDictF()
         try:
-            f[42]
+            num_dict_f[42]
         except KeyError as err:
             self.assertEqual(err.args, (42,))
         else:
-            self.fail("f[42] didn't raise KeyError")
+            self.fail("num_dict_f[42] didn't raise KeyError")
 
-        class G(NumDict):
+        class NumDictG(NumDict):
             """
             subclass doesn't define __missing__ at a all
             """
             pass
 
-        g = G()
+        num_dict_g = NumDictG()
         try:
-            g[42]
+            num_dict_g[42]
         except KeyError as err:
             self.assertEqual(err.args, (42,))
         else:
-            self.fail("g[42] didn't raise KeyError")
+            self.fail("num_dict_g[42] didn't raise KeyError")
 
-        class H(D):
+        class NumDictH(NumDictD):
             """
             subclass calls super classes __missing__ and modifies the value before returning it
             """
-            def __missing__(self, key):
-                return super(H, self).__missing__(key) + 1
+            def __missing__(self, key):  # pylint: disable=arguments-differ
+                return super(NumDictH, self).__missing__(key) + 1
 
-        h = H()
-        self.assertEqual(h[None], d[None]+1)
+        num_dict_h = NumDictH()
+        self.assertEqual(num_dict_h[None], num_dict_d[None]+1)
 
 
 def test_main():
+    """
+    Run tests when run as main
+    """
     import logging
     log = logging.getLogger(__name__)
     logging.basicConfig(level=logging.DEBUG)
diff --git a/tests/sickrage_tests/__init__.py b/tests/sickrage_tests/__init__.py
index bc77c49432b6bb0bf10b6649c7b7c87e3bbbdb09..f250b9e1d019f65aea1bae0aa142457a68e294ab 100644
--- a/tests/sickrage_tests/__init__.py
+++ b/tests/sickrage_tests/__init__.py
@@ -16,6 +16,7 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+from helper.common_tests import CommonTests
 from helper.quality_tests import QualityTests
 from show.coming_episodes_tests import ComingEpisodesTests
 from show.history_tests import HistoryTests
@@ -29,6 +30,7 @@ if __name__ == '__main__':
 
     test_classes = [
         ComingEpisodesTests,
+        CommonTests,
         HistoryTests,
         QualityTests,
         RestartTests,
diff --git a/tests/sickrage_tests/helper/common_tests.py b/tests/sickrage_tests/helper/common_tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..8991ab3ef7cb98dc474c6be241a0aded27f6bbef
--- /dev/null
+++ b/tests/sickrage_tests/helper/common_tests.py
@@ -0,0 +1,258 @@
+# This file is part of SickRage.
+#
+# URL: https://sickrage.github.io
+# Git: https://github.com/SickRage/SickRage.git
+#
+# SickRage is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# SickRage is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
+
+from unittest import TestCase, TestLoader, TextTestRunner
+
+import os
+import sys
+
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../../../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../../..')))
+
+import sickbeard
+
+from sickrage.helper.common import is_sync_file, is_torrent_or_nzb_file, pretty_file_size, remove_extension
+from sickrage.helper.common import replace_extension, sanitize_filename
+
+
+class CommonTests(TestCase):
+    def test_is_sync_file(self):
+        sickbeard.SYNC_FILES = '!sync,lftp-pget-status,part'
+
+        tests = {
+            None: False,
+            42: False,
+            '': False,
+            u'': False,
+            'filename': False,
+            u'filename': False,
+            '.syncthingfilename': True,
+            u'.syncthingfilename': True,
+            '.syncthing.filename': True,
+            u'.syncthing.filename': True,
+            '.syncthing-filename': True,
+            u'.syncthing-filename': True,
+            '.!sync': True,
+            u'.!sync': True,
+            'file.!sync': True,
+            u'file.!sync': True,
+            'file.!sync.ext': False,
+            u'file.!sync.ext': False,
+            '.lftp-pget-status': True,
+            u'.lftp-pget-status': True,
+            'file.lftp-pget-status': True,
+            u'file.lftp-pget-status': True,
+            'file.lftp-pget-status.ext': False,
+            u'file.lftp-pget-status.ext': False,
+            '.part': True,
+            u'.part': True,
+            'file.part': True,
+            u'file.part': True,
+            'file.part.ext': False,
+            u'file.part.ext': False,
+        }
+
+        for (filename, result) in tests.iteritems():
+            self.assertEqual(is_sync_file(filename), result)
+
+    def test_is_torrent_or_nzb_file(self):
+        tests = {
+            None: False,
+            42: False,
+            '': False,
+            u'': False,
+            'filename': False,
+            u'filename': False,
+            '.nzb': True,
+            u'.nzb': True,
+            'file.nzb': True,
+            u'file.nzb': True,
+            'file.nzb.part': False,
+            u'file.nzb.part': False,
+            '.torrent': True,
+            u'.torrent': True,
+            'file.torrent': True,
+            u'file.torrent': True,
+            'file.torrent.part': False,
+            u'file.torrent.part': False,
+        }
+
+        for (filename, result) in tests.iteritems():
+            self.assertEqual(is_torrent_or_nzb_file(filename), result)
+
+    def test_pretty_file_size(self):
+        tests = {
+            None: '',
+            '': '',
+            u'': '',
+            '1024': '1.00 KB',
+            u'1024': '1.00 KB',
+            '1024.5': '',
+            u'1024.5': '',
+            -42.5: '-42.50 B',
+            -42: '-42.00 B',
+            0: '0.00 B',
+            25: '25.00 B',
+            25.5: '25.50 B',
+            2 ** 10: '1.00 KB',
+            50 * 2 ** 10 + 25: '50.02 KB',
+            2 ** 20: '1.00 MB',
+            100 * 2 ** 20 + 50 * 2 ** 10 + 25: '100.05 MB',
+            2 ** 30: '1.00 GB',
+            200 * 2 ** 30 + 100 * 2 ** 20 + 50 * 2 ** 10 + 25: '200.10 GB',
+            2 ** 40: '1.00 TB',
+            400 * 2 ** 40 + 200 * 2 ** 30 + 100 * 2 ** 20 + 50 * 2 ** 10 + 25: '400.20 TB',
+            2 ** 50: '1.00 PB',
+            800 * 2 ** 50 + 400 * 2 ** 40 + 200 * 2 ** 30 + 100 * 2 ** 20 + 50 * 2 ** 10 + 25: '800.39 PB',
+            2 ** 60: 2 ** 60,
+        }
+
+        for (size, result) in tests.iteritems():
+            self.assertEqual(pretty_file_size(size), result)
+
+    def test_remove_extension(self):
+        tests = {
+            None: None,
+            42: 42,
+            '': '',
+            u'': u'',
+            '.': '.',
+            u'.': u'.',
+            'filename': 'filename',
+            u'filename': u'filename',
+            '.bashrc': '.bashrc',
+            u'.bashrc': u'.bashrc',
+            '.nzb': '.nzb',
+            u'.nzb': u'.nzb',
+            'file.nzb': 'file',
+            u'file.nzb': u'file',
+            'file.name.nzb': 'file.name',
+            u'file.name.nzb': u'file.name',
+            '.torrent': '.torrent',
+            u'.torrent': u'.torrent',
+            'file.torrent': 'file',
+            u'file.torrent': u'file',
+            'file.name.torrent': 'file.name',
+            u'file.name.torrent': u'file.name',
+            '.avi': '.avi',
+            u'.avi': u'.avi',
+            'file.avi': 'file',
+            u'file.avi': u'file',
+            'file.name.avi': 'file.name',
+            u'file.name.avi': u'file.name',
+        }
+
+        for (extension, result) in tests.iteritems():
+            self.assertEqual(remove_extension(extension), result)
+
+    def test_replace_extension(self):
+        tests = {
+            (None, None): None,
+            (None, ''): None,
+            (None, u''): None,
+            (42, None): 42,
+            (42, ''): 42,
+            (42, u''): 42,
+            ('', None): '',
+            ('', ''): '',
+            ('', u''): '',
+            (u'', None): u'',
+            (u'', ''): u'',
+            (u'', u''): u'',
+            ('.', None): '.',
+            ('.', ''): '.',
+            ('.', u''): '.',
+            ('.', 'avi'): '.',
+            ('.', u'avi'): '.',
+            (u'.', None): u'.',
+            (u'.', ''): u'.',
+            (u'.', u''): u'.',
+            (u'.', 'avi'): u'.',
+            (u'.', u'avi'): u'.',
+            ('filename', None): 'filename',
+            ('filename', ''): 'filename',
+            ('filename', u''): 'filename',
+            ('filename', 'avi'): 'filename',
+            ('filename', u'avi'): 'filename',
+            (u'filename', None): u'filename',
+            (u'filename', ''): u'filename',
+            (u'filename', u''): u'filename',
+            (u'filename', 'avi'): u'filename',
+            (u'filename', u'avi'): u'filename',
+            ('.bashrc', None): '.bashrc',
+            ('.bashrc', ''): '.bashrc',
+            ('.bashrc', u''): '.bashrc',
+            ('.bashrc', 'avi'): '.bashrc',
+            ('.bashrc', u'avi'): '.bashrc',
+            (u'.bashrc', None): u'.bashrc',
+            (u'.bashrc', ''): u'.bashrc',
+            (u'.bashrc', u''): u'.bashrc',
+            (u'.bashrc', 'avi'): u'.bashrc',
+            (u'.bashrc', u'avi'): u'.bashrc',
+            ('file.mkv', None): 'file.None',
+            ('file.mkv', ''): 'file.',
+            ('file.mkv', u''): 'file.',
+            ('file.mkv', 'avi'): 'file.avi',
+            ('file.mkv', u'avi'): 'file.avi',
+            (u'file.mkv', None): u'file.None',
+            (u'file.mkv', ''): u'file.',
+            (u'file.mkv', u''): u'file.',
+            (u'file.mkv', 'avi'): u'file.avi',
+            (u'file.mkv', u'avi'): u'file.avi',
+            ('file.name.mkv', None): 'file.name.None',
+            ('file.name.mkv', ''): 'file.name.',
+            ('file.name.mkv', u''): 'file.name.',
+            ('file.name.mkv', 'avi'): 'file.name.avi',
+            ('file.name.mkv', u'avi'): 'file.name.avi',
+            (u'file.name.mkv', None): u'file.name.None',
+            (u'file.name.mkv', ''): u'file.name.',
+            (u'file.name.mkv', u''): u'file.name.',
+            (u'file.name.mkv', 'avi'): u'file.name.avi',
+            (u'file.name.mkv', u'avi'): u'file.name.avi',
+        }
+
+        for ((filename, extension), result) in tests.iteritems():
+            self.assertEqual(replace_extension(filename, extension), result)
+
+    def test_sanitize_filename(self):
+        tests = {
+            None: '',
+            42: '',
+            '': '',
+            u'': u'',
+            'filename': 'filename',
+            u'filename': u'filename',
+            'fi\\le/na*me': 'fi-le-na-me',
+            u'fi\\le/na*me': u'fi-le-na-me',
+            'fi:le"na<me': 'filename',
+            u'fi:le"na<me': u'filename',
+            'fi>le|na?me': 'filename',
+            u'fi>le|na?me': u'filename',
+            ' . file\u2122name. .': 'file-u2122name',
+            u' . file\u2122name. .': u'filename',
+        }
+
+        for (filename, result) in tests.iteritems():
+            self.assertEqual(sanitize_filename(filename), result)
+
+
+if __name__ == '__main__':
+    print('=====> Testing %s' % __file__)
+
+    suite = TestLoader().loadTestsFromTestCase(CommonTests)
+    TextTestRunner(verbosity=2).run(suite)
diff --git a/tests/torrent_tests.py b/tests/torrent_tests.py
index 23a60edd6b4d8a75f938510d82746e637b71c44e..7ebe155953aefee44b452c1e004f53ead971c170 100644
--- a/tests/torrent_tests.py
+++ b/tests/torrent_tests.py
@@ -25,18 +25,47 @@ sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')
 import unittest
 
 import urlparse
-import test_lib as test
+import tests.test_lib as test
 from bs4 import BeautifulSoup
 from sickbeard.helpers import getURL
+from sickbeard.tv import TVEpisode, TVShow
 import requests
 
+from sickbeard.providers.bitcannon import BitCannonProvider
+
 class TorrentBasicTests(test.SickbeardTestDBCase):
 
+    @classmethod
+    def setUpClass(cls):
+        cls.shows = []
+
+        show = TVShow(1, 121361)
+        show.name = "Italian Works"
+        show.episodes = []
+        episode = TVEpisode(show, 05, 10)
+        episode.name = "Pines of Rome"
+        episode.scene_season = 5
+        episode.scene_episode = 10
+        show.episodes.append(episode)
+        cls.shows.append(show)
+
+    def test_bitcannon(self):
+        bitcannon = BitCannonProvider()
+        bitcannon.custom_url = ""        # true testing requires a valid URL here (e.g., "http://localhost:3000/")
+        bitcannon.api_key = ""
+
+        if len(bitcannon.custom_url) > 0:
+            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._doSearch(search_strings)   # {'Episode': ['Italian Works S05E10']}
+
+        return True
+
     def test_search(self):
-        self.url = 'http://kickass.to/'
-        searchURL = 'http://kickass.to/usearch/American%20Dad%21%20S08%20-S08E%20category%3Atv/?field=seeders&sorder=desc'
+        url = 'http://kickass.to/'
+        search_url = 'http://kickass.to/usearch/American%20Dad%21%20S08%20-S08E%20category%3Atv/?field=seeders&sorder=desc'
 
-        html = getURL(searchURL, session=requests.Session())
+        html = getURL(search_url, session=requests.Session())
         if not html:
             return
 
@@ -50,14 +79,14 @@ class TorrentBasicTests(test.SickbeardTestDBCase):
 
         #Continue only if one Release is found
         if len(torrent_rows) < 2:
-            print(u"The data returned does not contain any torrents")
+            print "The data returned does not contain any torrents"
             return
 
         for tr in torrent_rows[1:]:
 
             try:
-                link = urlparse.urljoin(self.url, (tr.find('div', {'class': 'torrentname'}).find_all('a')[1])['href'])
-                id = tr.get('id')[-7:]
+                link = urlparse.urljoin(url, (tr.find('div', {'class': 'torrentname'}).find_all('a')[1])['href'])
+                _id = tr.get('id')[-7:]
                 title = (tr.find('div', {'class': 'torrentname'}).find_all('a')[1]).text \
                     or (tr.find('div', {'class': 'torrentname'}).find_all('a')[2]).text
                 url = tr.find('a', 'imagnet')['href']