diff --git a/app/assets/javascripts/discourse/routes/application_route.js b/app/assets/javascripts/discourse/routes/application_route.js
index 5d0a1ef6e..40b464832 100644
--- a/app/assets/javascripts/discourse/routes/application_route.js
+++ b/app/assets/javascripts/discourse/routes/application_route.js
@@ -66,7 +66,7 @@ Discourse.ApplicationRoute = Em.Route.extend({
       @method closeModal
     **/
     closeModal: function() {
-      this.render('hide_modal', {into: 'modal', outlet: 'modalBody'});
+      this.render('hide-modal', {into: 'modal', outlet: 'modalBody'});
     },
 
     /**
diff --git a/app/assets/javascripts/discourse/views/modal/create_account_view.js b/app/assets/javascripts/discourse/views/create-account.js.es6
similarity index 68%
rename from app/assets/javascripts/discourse/views/modal/create_account_view.js
rename to app/assets/javascripts/discourse/views/create-account.js.es6
index 7946c4613..f3a269f8f 100644
--- a/app/assets/javascripts/discourse/views/modal/create_account_view.js
+++ b/app/assets/javascripts/discourse/views/create-account.js.es6
@@ -1,20 +1,9 @@
-/**
-  This view handles the create account modal
-
-  @class CreateAccountView
-  @extends Discourse.ModalBodyView
-  @namespace Discourse
-  @module Discourse
-**/
-Discourse.CreateAccountView = Discourse.ModalBodyView.extend({
+export default Discourse.ModalBodyView.extend({
   templateName: 'modal/create_account',
   title: I18n.t('create_account.title'),
   classNames: ['create-account'],
 
-  didInsertElement: function() {
-
-    this._super();
-
+  _setup: function() {
     // allows the submission the form when pressing 'ENTER' on *any* text input field
     // but only when the submit button is enabled
     var createAccountController = this.get('controller');
@@ -25,6 +14,5 @@ Discourse.CreateAccountView = Discourse.ModalBodyView.extend({
         }
       });
     });
-  }
-
+  }.on('didInsertElement')
 });
diff --git a/app/assets/javascripts/discourse/views/forgot-password.js.es6 b/app/assets/javascripts/discourse/views/forgot-password.js.es6
new file mode 100644
index 000000000..5bb6b40ee
--- /dev/null
+++ b/app/assets/javascripts/discourse/views/forgot-password.js.es6
@@ -0,0 +1,4 @@
+export default Discourse.ModalBodyView.extend({
+  templateName: 'modal/forgot_password',
+  title: I18n.t('forgot_password.title'),
+});
diff --git a/app/assets/javascripts/discourse/views/hide-modal.js.es6 b/app/assets/javascripts/discourse/views/hide-modal.js.es6
new file mode 100644
index 000000000..03ebe4080
--- /dev/null
+++ b/app/assets/javascripts/discourse/views/hide-modal.js.es6
@@ -0,0 +1,8 @@
+export default Em.View.extend({
+  // No rendering!
+  render: Em.K,
+
+  _hideModal: function() {
+    $('#discourse-modal').modal('hide');
+  }.on('didInsertElement')
+});
diff --git a/app/assets/javascripts/discourse/views/modal/history_view.js b/app/assets/javascripts/discourse/views/history.js.es6
similarity index 54%
rename from app/assets/javascripts/discourse/views/modal/history_view.js
rename to app/assets/javascripts/discourse/views/history.js.es6
index c02c4dfd0..f88b3f178 100644
--- a/app/assets/javascripts/discourse/views/modal/history_view.js
+++ b/app/assets/javascripts/discourse/views/history.js.es6
@@ -1,12 +1,4 @@
-/**
-  This view handles rendering of the history of a post
-
-  @class HistoryView
-  @extends Discourse.View
-  @namespace Discourse
-  @module Discourse
-**/
-Discourse.HistoryView = Discourse.ModalBodyView.extend({
+export default Discourse.ModalBodyView.extend({
   templateName: 'modal/history',
   title: I18n.t('history'),
 
@@ -14,5 +6,4 @@ Discourse.HistoryView = Discourse.ModalBodyView.extend({
     var viewPortHeight = $(window).height();
     this.$(".modal-body").css("max-height", Math.floor(0.8 * viewPortHeight) + "px");
   }.on("didInsertElement")
-
 });
diff --git a/app/assets/javascripts/discourse/views/modal/login_view.js b/app/assets/javascripts/discourse/views/login.js.es6
similarity index 76%
rename from app/assets/javascripts/discourse/views/modal/login_view.js
rename to app/assets/javascripts/discourse/views/login.js.es6
index 05390df73..334e91774 100644
--- a/app/assets/javascripts/discourse/views/modal/login_view.js
+++ b/app/assets/javascripts/discourse/views/login.js.es6
@@ -1,26 +1,14 @@
-/**
-  A modal view for handling user logins
-
-  @class LoginView
-  @extends Discourse.ModalBodyView
-  @namespace Discourse
-  @module Discourse
-**/
-Discourse.LoginView = Discourse.ModalBodyView.extend({
+export default Discourse.ModalBodyView.extend({
   templateName: 'modal/login',
   title: I18n.t('login.title'),
   classNames: ['login-modal'],
 
-
   mouseMove: function(e) {
     this.set('controller.lastX', e.screenX);
     this.set('controller.lastY', e.screenY);
   },
 
-  didInsertElement: function() {
-
-    this._super();
-
+  _setup: function() {
     var loginController = this.get('controller');
 
     // Get username and password from the browser's password manager,
@@ -28,7 +16,6 @@ Discourse.LoginView = Discourse.ModalBodyView.extend({
     loginController.set('loginName', $('#hidden-login-form input[name=username]').val());
     loginController.set('loginPassword', $('#hidden-login-form input[name=password]').val());
 
-
     Em.run.schedule('afterRender', function() {
       $('#login-account-password, #login-account-name').keydown(function(e) {
         if (e.keyCode === 13) {
@@ -38,9 +25,5 @@ Discourse.LoginView = Discourse.ModalBodyView.extend({
         }
       });
     });
-
-  }
-
+  }.on('didInsertElement')
 });
-
-
diff --git a/app/assets/javascripts/discourse/views/modal/forgot_password_view.js b/app/assets/javascripts/discourse/views/modal/forgot_password_view.js
deleted file mode 100644
index 0a5b37866..000000000
--- a/app/assets/javascripts/discourse/views/modal/forgot_password_view.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
-  This view handles the modal for when a user forgets their password
-
-  @class ForgotPasswordView
-  @extends Discourse.ModalBodyView
-  @namespace Discourse
-  @module Discourse
-**/
-Discourse.ForgotPasswordView = Discourse.ModalBodyView.extend({
-  templateName: 'modal/forgot_password',
-  title: I18n.t('forgot_password.title')
-});
-
-
diff --git a/app/assets/javascripts/discourse/views/modal/hide_modal_view.js b/app/assets/javascripts/discourse/views/modal/hide_modal_view.js
deleted file mode 100644
index f6a54a82b..000000000
--- a/app/assets/javascripts/discourse/views/modal/hide_modal_view.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
-  An empty view for when we want to close a modal.
-
-  @class HideModalView
-  @extends Discourse.ModalBodyView
-  @namespace Discourse
-  @module Discourse
-**/
-Discourse.HideModalView = Discourse.ModalBodyView.extend({
-
-  // No rendering!
-  render: function() { },
-
-  didInsertElement: function() {
-    $('#discourse-modal').modal('hide');
-  }
-
-});
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 21c1a84c5..f161045cb 100644
--- a/app/assets/javascripts/discourse/views/modal/modal_body_view.js
+++ b/app/assets/javascripts/discourse/views/modal/modal_body_view.js
@@ -8,11 +8,9 @@
 **/
 Discourse.ModalBodyView = Discourse.View.extend({
 
-  // Focus on first element
-  didInsertElement: function() {
-    var self = this;
-
-    var $discourseModal = $('#discourse-modal');
+  _setupModal: function() {
+    var self = this,
+        $discourseModal = $('#discourse-modal');
 
     $discourseModal.modal('show');
     $discourseModal.one("hide", function () {
@@ -21,6 +19,7 @@ Discourse.ModalBodyView = Discourse.View.extend({
 
     $('#modal-alert').hide();
 
+    // Focus on first element
     if (!Discourse.Mobile.mobileView) {
       Em.run.schedule('afterRender', function() {
         self.$('input:first').focus();
@@ -31,7 +30,7 @@ Discourse.ModalBodyView = Discourse.View.extend({
     if (title) {
       this.set('controller.controllers.modal.title', title);
     }
-  },
+  }.on('didInsertElement'),
 
   flashMessageChanged: function() {
     var flashMessage = this.get('controller.flashMessage');