diff --git a/.build/Gruntfile.js b/.build/Gruntfile.js
index c17b6261be3f3e1386b53992fd7ad1832b7e405f..8cb9dbda06574ae45961239741bc1daa60b2731e 100644
--- a/.build/Gruntfile.js
+++ b/.build/Gruntfile.js
@@ -53,9 +53,14 @@ module.exports = function(grunt) {
         },
         jshint: {
             options: {
-                eqeqeq: true
+                jshintrc: '../.jshintrc'
             },
-            uses_defaults: ['../gui/slick/js/**/*.js']
+            all: [
+                '../gui/slick/js/**/*.js',
+                '!../gui/slick/js/lib/**/*.js',
+                '!../gui/slick/js/ajaxNotifications.js',
+                '!../gui/slick/js/**/*.min.js', // We use this because ignores doesn't seem to work :(
+            ]
         }
     });
 
@@ -64,5 +69,12 @@ module.exports = function(grunt) {
     grunt.loadNpmTasks('grunt-contrib-cssmin');
     grunt.loadNpmTasks('grunt-contrib-jshint');
 
-    grunt.registerTask('default', ['bower_concat', 'uglify', 'cssmin']);
+    grunt.registerTask('default', [
+        'bower_concat',
+        'uglify',
+        'cssmin']
+    );
+    grunt.registerTask('travis', [
+        'jshint'
+    ]);
 };
diff --git a/.jshintignore b/.jshintignore
new file mode 100644
index 0000000000000000000000000000000000000000..121531af8467c5344c1ddd59c7a6452793e15152
--- /dev/null
+++ b/.jshintignore
@@ -0,0 +1 @@
+*.min.js
diff --git a/gui/slick/js/addTrendingShow.js b/gui/slick/js/addTrendingShow.js
index 84f00c70e938ca90e69effeb330964b3bcd8394e..ef5abbc17df8265c3d1b73b58d8eda01503a7024 100644
--- a/gui/slick/js/addTrendingShow.js
+++ b/gui/slick/js/addTrendingShow.js
@@ -1,7 +1,7 @@
 $.fn.loadContent = function(path, loadingTxt, errorTxt) {
     $(this).html('<img id="searchingAnim" src="' + srRoot + '/images/loading32' + themeSpinner + '.gif" height="32" width="32" />&nbsp;' + loadingTxt);
-    $(this).load(srRoot + path + ' #container', function(response, status, xhr) {
-        if (status == "error") $(this).empty().html(errorTxt);
+    $(this).load(srRoot + path + ' #container', function(response, status) {
+        if (status === "error") { $(this).empty().html(errorTxt); }
     });
 };
 
diff --git a/gui/slick/js/apibuilder.js b/gui/slick/js/apibuilder.js
index b806687082c1ad22f338a8d7e7b74554ecba96b6..5623ba810d5520cfa6af6a21928470199ec578e2 100644
--- a/gui/slick/js/apibuilder.js
+++ b/gui/slick/js/apibuilder.js
@@ -12,7 +12,7 @@ $(document).ready(function() {
             var name = $(item).attr('name');
             var value = $(item).val();
 
-            if(name !== undefined && value !== undefined && name != value && value) {
+            if(name !== undefined && value !== undefined && name !== value && value) {
                 if($.isArray(value)) {
                     value = value.join('|');
                 }
@@ -33,7 +33,7 @@ $(document).ready(function() {
             $(timeId).text(responseTime + 'ms');
             $(urlId).text(url + (jsonp ? '&jsonp=foo' : ''));
 
-            if(responseType.slice(0, 6) == 'image/') {
+            if(responseType.slice(0, 6) === 'image/') {
                 target.html($('<img/>').attr('src', url));
             } else {
                 var json = JSON.stringify(data, null, 4);
@@ -65,10 +65,10 @@ $(document).ready(function() {
             select.removeClass('hidden');
             select.find('option:gt(0)').remove();
 
-            for(var episode in episodes[show][season]) {
+            for(var episode in episodes[show][season]) { // jshint ignore:line
                 select.append($('<option>', {
-                    value: episodes[show][season][episode],
-                    label: 'Episode ' + episodes[show][season][episode],
+                    value: episodes[show][season][episode], // jshint ignore:line
+                    label: 'Episode ' + episodes[show][season][episode], // jshint ignore:line
                 }));
             }
         }
@@ -84,7 +84,7 @@ $(document).ready(function() {
             select.removeClass('hidden');
             select.find('option:gt(0)').remove();
 
-            for(var season in episodes[show]) {
+            for(var season in episodes[show]) { // jshint ignore:line
                 select.append($('<option>', {
                     value: season,
                     label: (season === 0) ? 'Specials' : 'Season ' + season,
@@ -95,7 +95,7 @@ $(document).ready(function() {
 
     // Enable command search
     $('#command-search').typeahead({
-        source: commands,
+        source: commands, // jshint ignore:line
     });
     $('#command-search').on('change', function() {
         var command = $(this).typeahead('getActive');
diff --git a/gui/slick/js/blackwhite.js b/gui/slick/js/blackwhite.js
index 09ac602ae9233481c4570daa3c4315f551a7d713..39199e8ce51ac643d595388e4ded798c98db1897 100644
--- a/gui/slick/js/blackwhite.js
+++ b/gui/slick/js/blackwhite.js
@@ -1,4 +1,4 @@
-function generateBlackWhiteList() {
+function generateBlackWhiteList() { // jshint ignore:line
     var realvalues = [];
 
     $('#white option').each(function(i, selected) {
@@ -13,7 +13,7 @@ function generateBlackWhiteList() {
     $("#blacklist").val(realvalues.join(","));
 }
 
-function updateBlackWhiteList(showName) {
+function updateBlackWhiteList(showName) { // jshint ignore:line
     $('#pool').children().remove();
 
     $('#blackwhitelist').show();
@@ -34,23 +34,23 @@ function updateBlackWhiteList(showName) {
 }
 
 $('#removeW').click(function() {
-    !$('#white option:selected').remove().appendTo('#pool');
+    !$('#white option:selected').remove().appendTo('#pool'); // jshint ignore:line
 });
 
 $('#addW').click(function() {
-    !$('#pool option:selected').remove().appendTo('#white');
+    !$('#pool option:selected').remove().appendTo('#white'); // jshint ignore:line
 });
 
 $('#addB').click(function() {
-    !$('#pool option:selected').remove().appendTo('#black');
+    !$('#pool option:selected').remove().appendTo('#black'); // jshint ignore:line
 });
 
 $('#removeP').click(function() {
-    !$('#pool option:selected').remove();
+    !$('#pool option:selected').remove(); // jshint ignore:line
 });
 
 $('#removeB').click(function() {
-    !$('#black option:selected').remove().appendTo('#pool');
+    !$('#black option:selected').remove().appendTo('#pool'); // jshint ignore:line
 });
 
 $('#addToWhite').click(function() {
diff --git a/gui/slick/js/meta.js b/gui/slick/js/meta.js
index e380c88217166a3f3e4c75c096fe241721af37a9..89e1ed36cb69f6fce012d834866d9e7d65bbdaf9 100644
--- a/gui/slick/js/meta.js
+++ b/gui/slick/js/meta.js
@@ -1,4 +1,4 @@
-function metaToBool(pyVar){
+function metaToBool(pyVar){ // jshint ignore:line
     var meta = $('meta[data-var="' + pyVar + '"]').data('content');
     if(meta === undefined){
         console.log(pyVar + ' is empty, did you forget to add this to main.mako?');
@@ -9,11 +9,11 @@ function metaToBool(pyVar){
     }
 }
 
-function getMeta(pyVar){
+function getMeta(pyVar){ // jshint ignore:line
     return $('meta[data-var="' + pyVar + '"]').data('content');
 }
 
-function isMeta(pyVar, result){
+function isMeta(pyVar, result){ // jshint ignore:line
     var reg = new RegExp(result.length > 1 ? result.join('|') : result);
     return (reg).test($('meta[data-var="' + pyVar + '"]').data('content'));
 }
diff --git a/gui/slick/js/newShow.js b/gui/slick/js/newShow.js
index 4df4b15009cd2b58db861a5d646999ff67a99809..df8b4cce36e53207cf499f5531fd0ddb448fa1ee 100644
--- a/gui/slick/js/newShow.js
+++ b/gui/slick/js/newShow.js
@@ -101,7 +101,7 @@ $(document).ready(function () {
     * Visit http://www.dynamicdrive.com/ for this script and 100s more.
     ***********************************************/
 
-    var myform = new formtowizard({
+    var myform = new formtowizard({ // jshint ignore:line
         formid: 'addShowForm',
         revealfx: ['slide', 500],
         oninit: function () {
diff --git a/gui/slick/js/qualityChooser.js b/gui/slick/js/qualityChooser.js
index fe2880be8956acdeea6fc6cd00c6882bfea26bd9..42827f4485f856e6d1683992fa7f2eb19a7e4562 100644
--- a/gui/slick/js/qualityChooser.js
+++ b/gui/slick/js/qualityChooser.js
@@ -8,7 +8,7 @@ $(document).ready(function() {
         }
 
         $('#anyQualities option').each(function() {
-            var result = preset & $(this).val(); // @TODO Find out what this does
+            var result = preset & $(this).val(); // jshint ignore:line
             if (result > 0) {
                 $(this).attr('selected', 'selected');
             } else {
@@ -17,7 +17,7 @@ $(document).ready(function() {
         });
 
         $('#bestQualities option').each(function() {
-            var result = preset & ($(this).val() << 16); // @TODO Find out what this does
+            var result = preset & ($(this).val() << 16); // jshint ignore:line
             if (result > 0) {
                 $(this).attr('selected', 'selected');
             } else {
diff --git a/gui/slick/js/restart.js b/gui/slick/js/restart.js
index 645e5019f2ede8b75b25b3bcc2c9e27e183e70d0..9c7ec6f0703d5fee800dec7855e7dd0408cb463a 100644
--- a/gui/slick/js/restart.js
+++ b/gui/slick/js/restart.js
@@ -38,7 +38,7 @@ $(document).ready(function() {
                     $('#restart_loading').hide();
                     $('#restart_success').show();
                     $('#refresh_message').show();
-                    setTimeout(function(){window.location = srRoot + '/' + sbDefaultPage + '/';}, 5000);
+                    setTimeout(function(){window.location = srRoot + '/' + sbDefaultPage + '/';}, 5000); // jshint ignore:line
                 }
             }
 
@@ -52,13 +52,13 @@ $(document).ready(function() {
     function ajaxError(x) {
         if (console_debug) { // jshint ignore:line
             if (x.status === 0) {
-                console.log(console_prefix + 'isAlive: Sickrage is not responding.');
+                console.log(console_prefix + 'isAlive: Sickrage is not responding.'); // jshint ignore:line
             } else if (x.status === 404) {
-                console.log(console_prefix + 'isAlive: Requested URL not found.');
+                console.log(console_prefix + 'isAlive: Requested URL not found.'); // jshint ignore:line
             } else if (x.status === 500) {
-                console.log(console_prefix + 'isAlive: Internel Server Error.');
+                console.log(console_prefix + 'isAlive: Internel Server Error.'); // jshint ignore:line
             }  else {
-                console.log(console_prefix + 'isAlive: Unknow Error.\n' + x.responseText);
+                console.log(console_prefix + 'isAlive: Unknow Error.\n' + x.responseText); // jshint ignore:line
             }
         }
     }