diff --git a/app/assets/javascripts/discourse/models/composer.js b/app/assets/javascripts/discourse/models/composer.js
index 247b76772..9f7fdb2f0 100644
--- a/app/assets/javascripts/discourse/models/composer.js
+++ b/app/assets/javascripts/discourse/models/composer.js
@@ -478,7 +478,7 @@ Discourse.Composer = Discourse.Model.extend({
   },
 
   /**
-    Computes the length of the reply minus the quote(s).
+    Computes the length of the reply minus the quote(s) and non-significant whitespaces
 
     @property replyLength
   **/
@@ -486,7 +486,7 @@ Discourse.Composer = Discourse.Model.extend({
     var reply = this.get('reply');
     if(!reply) reply = "";
     while (Discourse.BBCode.QUOTE_REGEXP.test(reply)) { reply = reply.replace(Discourse.BBCode.QUOTE_REGEXP, ""); }
-    return reply.trim().length;
+    return reply.replace(/\s+/img, " ").trim().length;
   }.property('reply')
 
 });
diff --git a/spec/javascripts/models/composer_spec.js b/spec/javascripts/models/composer_spec.js
index ec5e3a179..d1492a743 100644
--- a/spec/javascripts/models/composer_spec.js
+++ b/spec/javascripts/models/composer_spec.js
@@ -10,10 +10,16 @@ describe("Discourse.Composer", function() {
     });
 
     it("trims whitespaces", function() {
-      var composer = Discourse.Composer.create({ reply: "\nbasic reply\t" });
+      var composer = Discourse.Composer.create({ reply: " \nbasic reply\t" });
       expect(composer.get('replyLength')).toBe(11);
     });
 
+    it("count only significant whitespaces", function() {
+      // this will count the '\n' only once
+      var composer = Discourse.Composer.create({ reply: "ba sic\n\nreply" });
+      expect(composer.get('replyLength')).toBe(12);
+    });
+
     it("removes quotes", function() {
       var composer = Discourse.Composer.create({ reply: "1[quote=]not counted[/quote]2[quote=]at all[/quote]3" });
       expect(composer.get('replyLength')).toBe(3);