diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 000000000..19f81f75a
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,68 @@
+{
+  "predef":["Ember",
+    "jQuery",
+    "$",
+    "RSVP",
+    "Discourse",
+    "$LAB",
+    "Em",
+    "PreloadStore",
+    "Handlebars",
+    "I18n",
+    "bootbox",
+    "module",
+    "integration",
+    "test",
+    "ok",
+    "expect",
+    "equal",
+    "blank",
+    "present",
+    "visit",
+    "count",
+    "exists",
+    "asyncTestDiscourse",
+    "fixture",
+    "find",
+    "sinon",
+    "moment",
+    "start",
+    "_",
+    "console",
+    "alert",
+    "controllerFor",
+    "testController",
+    "containsInstance",
+    "parseHTML",
+    "deepEqual",
+    "notEqual",
+    "Blob",
+    "File"],
+  "node" : false,
+  "browser" : true,
+  "boss" : true,
+  "curly": false,
+  "debug": false,
+  "devel": false,
+  "eqeqeq": true,
+  "evil": true,
+  "forin": false,
+  "immed": false,
+  "laxbreak": false,
+  "newcap": true,
+  "noarg": true,
+  "noempty": false,
+  "nonew": false,
+  "nomen": false,
+  "onevar": false,
+  "plusplus": false,
+  "regexp": false,
+  "undef": true,
+  "unused": true,
+  "sub": true,
+  "strict": false,
+  "white": false,
+  "eqnull": true,
+  "quotmark": false,
+  "lastsemic": true
+}
\ No newline at end of file
diff --git a/app/assets/javascripts/discourse.js b/app/assets/javascripts/discourse.js
index 04f833260..33e118039 100644
--- a/app/assets/javascripts/discourse.js
+++ b/app/assets/javascripts/discourse.js
@@ -28,6 +28,7 @@ window.Discourse = Ember.Application.createWithMixins(Discourse.Ajax, {
 
   titleChanged: function() {
     var title = "";
+
     if (this.get('title')) {
       title += "" + (this.get('title')) + " - ";
     }
diff --git a/config/jshint.yml b/config/jshint.yml
deleted file mode 100644
index a54a2ab30..000000000
--- a/config/jshint.yml
+++ /dev/null
@@ -1,133 +0,0 @@
-# ------------ rake task options ------------
-
-# JS files to check by default, if no parameters are passed to rake jshint
-# (you may want to limit this only to your own scripts and exclude any external scripts and frameworks)
-
-# this can be overridden by adding 'paths' and 'exclude_paths' parameter to rake command:
-#   rake jshint paths=path1,path2,... exclude_paths=library1,library2,...
-
-paths:
-  - app/assets/javascripts/**/*.js
-  - spec/javascripts/**/*.js
-  - spec/phantom_js/**/*.js
-  - test/javascripts/**/*.js
-
-exclude_paths:
-  - app/assets/javascripts/defer/*
-  - app/assets/javascripts/locales/i18n.js
-
-
-# ------------ jshint options ------------
-# visit http://jshint.com/ for complete documentation
-
-# "enforce" type options (true means potentially more warnings)
-
-adsafe:   false     # true if ADsafe rules should be enforced. See http://www.ADsafe.org/
-bitwise:  true     # true if bitwise operators should not be allowed
-newcap:   true      # true if Initial Caps must be used with constructor functions
-eqeqeq:   true      # true if === should be required (for ALL equality comparisons)
-immed:    false     # true if immediate function invocations must be wrapped in parens
-nomen:    false     # true if initial or trailing underscore in identifiers should be forbidden
-onevar:   false     # true if only one var statement per function should be allowed
-plusplus: false     # true if ++ and -- should not be allowed
-regexp:   false     # true if . and [^...] should not be allowed in RegExp literals
-safe:     false     # true if the safe subset rules are enforced (used by ADsafe)
-strict:   false     # true if the ES5 "use strict"; pragma is required
-undef:    true      # true if variables must be declared before used
-unused:   true
-white:    false     # true if strict whitespace rules apply (see also 'indent' option)
-eqnull:   false
-onecase:  true     # allow for one case switches, can be more elegant sometimes
-
-# "allow" type options (false means potentially more warnings)
-
-cap:      false     # true if upper case HTML should be allowed
-css:      false     # true if CSS workarounds should be tolerated
-debug:    false     # true if debugger statements should be allowed (set to false before going into production)
-es5:      false     # true if ECMAScript 5 syntax should be allowed
-evil:     false     # true if eval should be allowed
-forin:    false     # true if unfiltered 'for in' statements should be allowed
-fragment: false     # true if HTML fragments should be allowed
-laxbreak: false     # true if statement breaks should not be checked
-on:       false     # true if HTML event handlers (e.g. onclick="...") should be allowed
-sub:      false     # true if subscript notation may be used for expressions better expressed in dot notation
-
-# other options
-
-maxlen:   200       # Maximum line length
-indent:   2         # Number of spaces that should be used for indentation - used only if 'white' option is set
-maxerr:   50        # The maximum number of warnings reported (per file)
-passfail: false     # true if the scan should stop on first error (per file)
-# following are relevant only if undef = true
-
-# Some of these can be declared in other ways I think
-predef:
-  - Ember
-  - jQuery
-  - $
-  - RSVP
-  - Discourse
-  - $LAB
-  - Em
-  - PreloadStore
-  - Handlebars
-  - I18n
-  - bootbox
-  - moment
-  - _
-  - module
-  - integration
-  - test
-  - ok
-  - expect
-  - equal
-  - blank
-  - present
-  - visit
-  - count
-  - exists
-  - asyncTestDiscourse
-  - fixture
-  - find
-  - sinon
-  - controllerFor
-  - testController
-  - Favcount
-
-browser:  true      # true if the standard browser globals should be predefined
-rhino:    false     # true if the Rhino environment globals should be predefined
-windows:  false     # true if Windows-specific globals should be predefined
-widget:   false     # true if the Yahoo Widgets globals should be predefined
-devel:    true      # true if functions like alert, confirm, console, prompt etc. are predefined
-
-# jshint options
-loopfunc: true      # true if functions should be allowed to be defined within loops
-asi:      true      # true if automatic semicolon insertion should be tolerated
-boss:     true      # true if advanced usage of assignments and == should be allowed
-couch:    true      # true if CouchDB globals should be predefined
-curly:    false     # true if curly braces around blocks should be required (even in if/for/while)
-noarg:    true      # true if arguments.caller and arguments.callee should be disallowed
-node:     false     # true if the Node.js environment globals should be predefined
-noempty:  false     # true if empty blocks should be disallowed
-nonew:    true      # true if using `new` for side-effects should be disallowed
-
-
-# ------------ jshint_on_rails custom lint options (switch to true to disable some annoying warnings) ------------
-
-# ignores "missing semicolon" warning at the end of a function; this lets you write one-liners
-# like: x.map(function(i) { return i + 1 }); without having to put a second semicolon inside the function
-lastsemic: false
-
-# allows you to use the 'new' expression as a statement (without assignment)
-# so you can call e.g. new Ajax.Request(...), new Effect.Highlight(...) without assigning to a dummy variable
-newstat: false
-
-# ignores the "Expected an assignment or function call and instead saw an expression" warning,
-# if the expression contains a proper statement and makes sense; this lets you write things like:
-#    element && element.show();
-#    valid || other || lastChance || alert('OMG!');
-#    selected ? show() : hide();
-# although these will still cause a warning:
-#    element && link;
-#    selected ? 5 : 10;
-statinexp: false
diff --git a/test/javascripts/jshint_all.js.erb b/test/javascripts/jshint_all.js.erb
index 8ac790cd6..7353f7cdf 100644
--- a/test/javascripts/jshint_all.js.erb
+++ b/test/javascripts/jshint_all.js.erb
@@ -90,74 +90,6 @@ qHint.sendRequest = function (url, callback) {
   req.send();
 };
 
-var jsHintOpts = {
-  "predef":["Ember",
-    "jQuery",
-    "$",
-    "RSVP",
-    "Discourse",
-    "$LAB",
-    "Em",
-    "PreloadStore",
-    "Handlebars",
-    "I18n",
-    "bootbox",
-    "module",
-    "integration",
-    "test",
-    "ok",
-    "expect",
-    "equal",
-    "blank",
-    "present",
-    "visit",
-    "count",
-    "exists",
-    "asyncTestDiscourse",
-    "fixture",
-    "find",
-    "sinon",
-    "moment",
-    "start",
-    "_",
-    "console",
-    "alert",
-    "controllerFor",
-    "testController",
-    "containsInstance",
-    "parseHTML",
-    "deepEqual",
-    "notEqual",
-    "Blob",
-    "File"],
-  "node" : false,
-  "browser" : true,
-  "boss" : true,
-  "curly": false,
-  "debug": false,
-  "devel": false,
-  "eqeqeq": true,
-  "evil": true,
-  "forin": false,
-  "immed": false,
-  "laxbreak": false,
-  "newcap": true,
-  "noarg": true,
-  "noempty": false,
-  "nonew": false,
-  "nomen": false,
-  "onevar": false,
-  "plusplus": false,
-  "regexp": false,
-  "undef": true,
-  "unused": true,
-  "sub": true,
-  "strict": false,
-  "white": false,
-  "eqnull": true,
-  "lastsemic": true
-};
-
 <%
   def jshint(dir, remove, to_ignore)
     result = ""
@@ -172,7 +104,7 @@ var jsHintOpts = {
 
       depend_on filename
 
-      result << "qHint('#{filename}', '/assets/#{filename}', jsHintOpts);\n" if ok
+      result << "qHint('#{filename}', '/assets/#{filename}', #{File.read(File.join(Rails.root, '.jshintrc'))});\n" if ok
 
     end
     result