diff --git a/app/assets/javascripts/discourse/components/development.js b/app/assets/javascripts/discourse/components/development.js
index 654e614c8..eee9ed0fc 100644
--- a/app/assets/javascripts/discourse/components/development.js
+++ b/app/assets/javascripts/discourse/components/development.js
@@ -128,9 +128,9 @@ Discourse.Development = {
               if (this.get('templateName') === templateName) {
                 this.set('templateName', 'empty');
                 this.rerender();
-                return Em.run.next(function() {
+                Em.run.schedule('afterRender', function() {
                   _this.set('templateName', templateName);
-                  return _this.rerender();
+                  _this.rerender();
                 });
               }
             });
diff --git a/app/assets/javascripts/discourse/controllers/application_controller.js b/app/assets/javascripts/discourse/controllers/application_controller.js
index dee288bcc..880896cff 100644
--- a/app/assets/javascripts/discourse/controllers/application_controller.js
+++ b/app/assets/javascripts/discourse/controllers/application_controller.js
@@ -20,7 +20,7 @@ Discourse.ApplicationController = Discourse.Controller.extend({
     if (window._gaq === undefined) { return; }
 
     if(this.afterFirstHit) {
-      Em.run.next(function(){
+      Em.run.schedule('afterRender', function() {
         _gaq.push(['_trackPageview']);
       });
     } else {
diff --git a/app/assets/javascripts/discourse/controllers/quote_button_controller.js b/app/assets/javascripts/discourse/controllers/quote_button_controller.js
index c8a868907..a78d42753 100644
--- a/app/assets/javascripts/discourse/controllers/quote_button_controller.js
+++ b/app/assets/javascripts/discourse/controllers/quote_button_controller.js
@@ -84,7 +84,8 @@ Discourse.QuoteButtonController = Discourse.Controller.extend({
     var markerOffset = $(markerElement).offset(),
         $quoteButton = $('.quote-button');
 
-    Em.run.next(function(){
+
+    Em.run.schedule('afterRender', function() {
       $quoteButton.offset({
         top: markerOffset.top - $quoteButton.outerHeight() - 5,
         left: markerOffset.left
diff --git a/app/assets/javascripts/discourse/controllers/topic_controller.js b/app/assets/javascripts/discourse/controllers/topic_controller.js
index 8815445c5..29cf64e8e 100644
--- a/app/assets/javascripts/discourse/controllers/topic_controller.js
+++ b/app/assets/javascripts/discourse/controllers/topic_controller.js
@@ -246,7 +246,7 @@ Discourse.TopicController = Discourse.ObjectController.extend(Discourse.Selected
   loadPosts: function(opts) {
     var topicController = this;
     this.get('content').loadPosts(opts).then(function () {
-      Em.run.next(function () { topicController.updateBottomBar(); });
+      Em.run.scheduleOnce('afterRender', topicController, 'updateBottomBar');
     });
   },
 
@@ -276,7 +276,7 @@ Discourse.TopicController = Discourse.ObjectController.extend(Discourse.Selected
         posts.pushObject(Discourse.Post.create(p, topic));
       });
 
-      Em.run.next(function () { topicController.updateBottomBar(); });
+      Em.run.scheduleOnce('afterRender', topicController, 'updateBottomBar');
 
       topicController.set('filtered_posts_count', result.filtered_posts_count);
       topicController.set('loadingBelow', false);
diff --git a/app/assets/javascripts/discourse/views/choose_topic_view.js b/app/assets/javascripts/discourse/views/choose_topic_view.js
index 31d55821c..e2c75e793 100644
--- a/app/assets/javascripts/discourse/views/choose_topic_view.js
+++ b/app/assets/javascripts/discourse/views/choose_topic_view.js
@@ -40,7 +40,7 @@ Discourse.ChooseTopicView = Discourse.View.extend({
     var topicId = Em.get(topic, 'id');
     this.set('selectedTopicId', topicId);
 
-    Em.run.next(function() {
+    Em.run.schedule('afterRender', function () {
       $('#choose-topic-' + topicId).prop('checked', 'true');
     });
 
diff --git a/app/assets/javascripts/discourse/views/composer_view.js b/app/assets/javascripts/discourse/views/composer_view.js
index 7f341843d..f2154519b 100644
--- a/app/assets/javascripts/discourse/views/composer_view.js
+++ b/app/assets/javascripts/discourse/views/composer_view.js
@@ -91,7 +91,7 @@ Discourse.ComposerView = Discourse.View.extend({
 
   resize: function() {
     // this still needs to wait on animations, need a clean way to do that
-    return Em.run.next(null, function() {
+    return Em.run.schedule('afterRender', function() {
       var replyControl = $('#reply-control');
       var h = replyControl.height() || 0;
       var sizePx = "" + h + "px";
@@ -263,7 +263,7 @@ Discourse.ComposerView = Discourse.View.extend({
       // cf. https://github.com/blueimp/jQuery-File-Upload/wiki/API#how-to-cancel-an-upload
       var jqXHR = data.xhr();
       // need to wait for the link to show up in the DOM
-      Em.run.next(function() {
+      Em.run.schedule('afterRender', function() {
         // bind on the click event on the cancel link
         $('#cancel-image-upload').on('click', function() {
           // cancel the upload
@@ -334,9 +334,11 @@ Discourse.ComposerView = Discourse.View.extend({
         caretPosition = Discourse.Utilities.caretPosition(ctrl),
         current = this.get('content.reply');
     this.set('content.reply', current.substring(0, caretPosition) + text + current.substring(caretPosition, current.length));
-    return Em.run.next(function() {
-      return Discourse.Utilities.setCaretPosition(ctrl, caretPosition + text.length);
+
+    Em.run.schedule('afterRender', function() {
+      Discourse.Utilities.setCaretPosition(ctrl, caretPosition + text.length);
     });
+
   },
 
   // Uses javascript to get the image sizes from the preview, if present
diff --git a/app/assets/javascripts/discourse/views/list/list_topics_view.js b/app/assets/javascripts/discourse/views/list/list_topics_view.js
index 3919a69d7..dd05ae7b9 100644
--- a/app/assets/javascripts/discourse/views/list/list_topics_view.js
+++ b/app/assets/javascripts/discourse/views/list/list_topics_view.js
@@ -17,9 +17,7 @@ Discourse.ListTopicsView = Discourse.View.extend(Discourse.Scrolling, {
   insertedCount: (function() {
     var inserted;
     inserted = this.get('controller.inserted');
-    if (!inserted) {
-      return 0;
-    }
+    if (!inserted) return 0;
     return inserted.length;
   }).property('controller.inserted.@each'),
 
@@ -36,24 +34,26 @@ Discourse.ListTopicsView = Discourse.View.extend(Discourse.Scrolling, {
   }).property('loading', 'controller.content.more_topics_url'),
 
   didInsertElement: function() {
-    var eyeline, scrollPos,
-      _this = this;
     this.bindScrolling();
-    eyeline = new Discourse.Eyeline('.topic-list-item');
+    var eyeline = new Discourse.Eyeline('.topic-list-item');
+
+    var listTopicsView = this;
     eyeline.on('sawBottom', function() {
-      return _this.loadMore();
+      listTopicsView.loadMore();
     });
-    if (scrollPos = Discourse.get('transient.topicListScrollPos')) {
-      Em.run.next(function() {
-        return $('html, body').scrollTop(scrollPos);
+
+    var scrollPos = Discourse.get('transient.topicListScrollPos');
+    if (scrollPos) {
+      Em.run.schedule('afterRender', function() {
+        $('html, body').scrollTop(scrollPos);
       });
     } else {
-      Em.run.next(function() {
-        return $('html, body').scrollTop(0);
+      Em.run.schedule('afterRender', function() {
+        $('html, body').scrollTop(0);
       });
     }
     this.set('eyeline', eyeline);
-    return this.set('currentTopicId', null);
+    this.set('currentTopicId', null);
   },
 
   loadMore: function() {
@@ -66,7 +66,9 @@ Discourse.ListTopicsView = Discourse.View.extend(Discourse.Scrolling, {
       promise.then(function(hasMoreResults) {
         listTopicsView.set('loadedMore', true);
         listTopicsView.set('loading', false);
-        Em.run.next(function() { listTopicsView.saveScrollPos(); });
+        Em.run.schedule('afterRender', function() {
+          listTopicsView.saveScrollPos();
+        });
         if (!hasMoreResults) {
           listTopicsView.get('eyeline').flushRest();
         }
diff --git a/app/assets/javascripts/discourse/views/modal/create_account_view.js b/app/assets/javascripts/discourse/views/modal/create_account_view.js
index 3eaca21b3..c19770104 100644
--- a/app/assets/javascripts/discourse/views/modal/create_account_view.js
+++ b/app/assets/javascripts/discourse/views/modal/create_account_view.js
@@ -278,11 +278,11 @@ Discourse.CreateAccountView = Discourse.ModalBodyView.extend({
   didInsertElement: function(e) {
     // allows the submission the form when pressing 'ENTER' on *any* text input field
     // but only when the submit button is enabled
-    var _this = this;
-    return Em.run.next(function() {
-      return $("input[type='text'], input[type='password']").keydown(function(e) {
-        if (_this.get('submitDisabled') === false && e.keyCode === 13) {
-          return _this.createAccount();
+    var createAccountView = this;
+    Em.run.schedule('afterRender', function() {
+      $("input[type='text'], input[type='password']").keydown(function(e) {
+        if (createAccountView.get('submitDisabled') === false && e.keyCode === 13) {
+          createAccountView.createAccount();
         }
       });
     });
diff --git a/app/assets/javascripts/discourse/views/modal/flag_view.js b/app/assets/javascripts/discourse/views/modal/flag_view.js
index 6339287ef..7c9ac37d7 100644
--- a/app/assets/javascripts/discourse/views/modal/flag_view.js
+++ b/app/assets/javascripts/discourse/views/modal/flag_view.js
@@ -35,7 +35,7 @@ Discourse.FlagView = Discourse.ModalBodyView.extend({
     this.set('postActionTypeId', action.id);
     this.set('isCustomFlag', action.is_custom_flag);
     this.set('selected', action);
-    Em.run.next(function() {
+    Em.run.schedule('afterRender', function() {
       $('#radio_' + action.name_key).prop('checked', 'true');
     });
     return false;
@@ -45,7 +45,7 @@ Discourse.FlagView = Discourse.ModalBodyView.extend({
     var _this = this;
 
     var action = this.get('selected');
-    var postAction = this.get('post.actionByName.' + (action.get('name_key'))); 
+    var postAction = this.get('post.actionByName.' + (action.get('name_key')));
 
     var actionType = Discourse.get('site').postActionTypeById(this.get('postActionTypeId'));
     if (postAction) {
diff --git a/app/assets/javascripts/discourse/views/modal/invite_modal_view.js b/app/assets/javascripts/discourse/views/modal/invite_modal_view.js
index e80e814d4..bf5d390f8 100644
--- a/app/assets/javascripts/discourse/views/modal/invite_modal_view.js
+++ b/app/assets/javascripts/discourse/views/modal/invite_modal_view.js
@@ -33,9 +33,9 @@ Discourse.InviteModalView = Discourse.ModalBodyView.extend({
   }).property('email'),
 
   didInsertElement: function() {
-    var _this = this;
-    Em.run.next(function() {
-      _this.$('input').focus();
+    var inviteModalView = this;
+    Em.run.schedule('afterRender', function() {
+      inviteModalView.$('input').focus();
     });
   },
 
diff --git a/app/assets/javascripts/discourse/views/modal/invite_private_modal_view.js b/app/assets/javascripts/discourse/views/modal/invite_private_modal_view.js
index cbdda9a47..84af53e27 100644
--- a/app/assets/javascripts/discourse/views/modal/invite_private_modal_view.js
+++ b/app/assets/javascripts/discourse/views/modal/invite_private_modal_view.js
@@ -25,9 +25,9 @@ Discourse.InvitePrivateModalView = Discourse.ModalBodyView.extend({
   }).property('saving'),
 
   didInsertElement: function() {
-    var _this = this;
-    return Em.run.next(function() {
-      return _this.$('input').focus();
+    var invitePrivateModalView = this;
+    Em.run.schedule('afterRender', function() {
+      invitePrivateModalView.$('input').focus();
     });
   },
 
@@ -39,11 +39,11 @@ Discourse.InvitePrivateModalView = Discourse.ModalBodyView.extend({
     this.get('topic').inviteUser(this.get('emailOrUsername')).then(function() {
       // Success
       _this.set('saving', false);
-      return _this.set('finished', true);
+      _this.set('finished', true);
     }, function() {
       // Failure
       _this.set('error', true);
-      return _this.set('saving', false);
+      _this.set('saving', false);
     });
     return false;
   }
diff --git a/app/assets/javascripts/discourse/views/modal/login_view.js b/app/assets/javascripts/discourse/views/modal/login_view.js
index 1311b1f5d..8bf21210f 100644
--- a/app/assets/javascripts/discourse/views/modal/login_view.js
+++ b/app/assets/javascripts/discourse/views/modal/login_view.js
@@ -161,7 +161,7 @@ Discourse.LoginView = Discourse.ModalBodyView.extend({
     this.set('loginPassword', $('#hidden-login-form input[name=password]').val());
 
     var loginView = this;
-    Em.run.next(function() {
+    Em.run.schedule('afterRender', function() {
       $('#login-account-password').keydown(function(e) {
         if (e.keyCode === 13) {
           loginView.login();
diff --git a/app/assets/javascripts/discourse/views/modal/modal_body_view.js b/app/assets/javascripts/discourse/views/modal/modal_body_view.js
index 0e4fc66f5..784b4196f 100644
--- a/app/assets/javascripts/discourse/views/modal/modal_body_view.js
+++ b/app/assets/javascripts/discourse/views/modal/modal_body_view.js
@@ -11,7 +11,9 @@ Discourse.ModalBodyView = Discourse.View.extend({
   // Focus on first element
   didInsertElement: function() {
     var modalBodyView = this;
-    Em.run.next(function() { modalBodyView.$('form input:first').focus(); });
+    Em.run.schedule('afterRender', function() {
+      modalBodyView.$('form input:first').focus();
+    });
   },
 
   // Pass the errors to our errors view
diff --git a/app/assets/javascripts/discourse/views/modal/modal_view.js b/app/assets/javascripts/discourse/views/modal/modal_view.js
index 7b0b9295f..e5848f97e 100644
--- a/app/assets/javascripts/discourse/views/modal/modal_view.js
+++ b/app/assets/javascripts/discourse/views/modal/modal_view.js
@@ -26,7 +26,7 @@ Discourse.ModalView = Ember.ContainerView.extend({
     var modalView = this;
     if (view) {
       $('#modal-alert').hide();
-      Em.run.next(function() { modalView.$().modal('show'); });
+      Em.run.schedule('afterRender', function() { modalView.$().modal('show'); });
     }
   }.observes('controller.currentView')
 
diff --git a/app/assets/javascripts/discourse/views/post_view.js b/app/assets/javascripts/discourse/views/post_view.js
index 76fae5539..faadf48cd 100644
--- a/app/assets/javascripts/discourse/views/post_view.js
+++ b/app/assets/javascripts/discourse/views/post_view.js
@@ -35,7 +35,9 @@ Discourse.PostView = Discourse.View.extend({
   // If the cooked content changed, add the quote controls
   cookedChanged: function() {
     var postView = this;
-    Em.run.next(function() { postView.insertQuoteControls(); });
+    Em.run.schedule('afterRender', function() {
+      postView.insertQuoteControls();
+    });
   }.observes('post.cooked'),
 
   init: function() {
diff --git a/app/assets/javascripts/discourse/views/replies_view.js b/app/assets/javascripts/discourse/views/replies_view.js
index 1fe08f978..495fb9877 100644
--- a/app/assets/javascripts/discourse/views/replies_view.js
+++ b/app/assets/javascripts/discourse/views/replies_view.js
@@ -13,14 +13,13 @@ Discourse.RepliesView = Ember.CollectionView.extend({
   itemViewClass: Discourse.EmbeddedPostView,
 
   repliesShown: (function() {
-    var $this;
-    $this = this.$();
+    var $this = this.$();
     if (this.get('parentView.repliesShown')) {
-      Em.run.next(function() {
+      Em.run.schedule('afterRender', function() {
         $this.slideDown();
       });
     } else {
-      Em.run.next(function() {
+      Em.run.schedule('afterRender', function() {
         $this.slideUp();
       });
     }
diff --git a/app/assets/javascripts/discourse/views/user/user_stream_view.js b/app/assets/javascripts/discourse/views/user/user_stream_view.js
index 1c7045ca8..dc68daa4e 100644
--- a/app/assets/javascripts/discourse/views/user/user_stream_view.js
+++ b/app/assets/javascripts/discourse/views/user/user_stream_view.js
@@ -29,9 +29,9 @@ Discourse.UserStreamView = Discourse.View.extend(Discourse.Scrolling, {
       this.set('loading', true);
 
       var userStreamView = this;
-      return this.get('controller.content').loadMoreUserActions().then(function() {
+      this.get('controller.content').loadMoreUserActions().then(function() {
         userStreamView.set('loading', false);
-        Em.run.next(function() {
+        Em.run.schedule('afterRender', function() {
           $userStreamBottom.data('loading', null);
         });
       });