diff --git a/Gemfile b/Gemfile
index 551c79baa..59a10f8b0 100644
--- a/Gemfile
+++ b/Gemfile
@@ -107,6 +107,7 @@ gem 'ember-rails'
 gem 'ember-source', '1.9.0.beta.4'
 gem 'handlebars-source', '2.0.0'
 gem 'barber'
+gem '6to5'
 
 gem 'message_bus'
 gem 'rails_multisite', path: 'vendor/gems/rails_multisite'
diff --git a/Gemfile.lock b/Gemfile.lock
index 961ded292..e5d8048d2 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -6,6 +6,10 @@ PATH
 GEM
   remote: https://rubygems.org/
   specs:
+    6to5 (0.5.0)
+      6to5-source (>= 1.14, < 4)
+      execjs (~> 2.0)
+    6to5-source (3.3.7)
     CFPropertyList (2.2.8)
     actionmailer (4.1.8)
       actionpack (= 4.1.8)
@@ -456,6 +460,7 @@ PLATFORMS
   ruby
 
 DEPENDENCIES
+  6to5
   actionpack-action_caching
   active_model_serializers (~> 0.8.0)
   annotate
diff --git a/app/assets/javascripts/discourse/components/toggle-summary.js.es6 b/app/assets/javascripts/discourse/components/toggle-summary.js.es6
index 440cf8f02..45dad2660 100644
--- a/app/assets/javascripts/discourse/components/toggle-summary.js.es6
+++ b/app/assets/javascripts/discourse/components/toggle-summary.js.es6
@@ -1,11 +1,3 @@
-/**
-  The controls for toggling the summarized view on/off
-
-  @class ToggleSummaryComponent
-  @extends Ember.Component
-  @namespace Discourse
-  @module Discourse
-**/
 export default Ember.Component.extend({
   layoutName: 'components/toggle-summary',
   tagName: 'section',
@@ -13,7 +5,7 @@ export default Ember.Component.extend({
   postStream: Em.computed.alias('topic.postStream'),
 
   actions: {
-    toggleSummary: function() {
+    toggleSummary() {
       this.get('postStream').toggleSummary();
     }
   }
diff --git a/app/assets/javascripts/discourse/helpers/cold-age-class.js.es6 b/app/assets/javascripts/discourse/helpers/cold-age-class.js.es6
index 114163d7c..5fd1a3b86 100644
--- a/app/assets/javascripts/discourse/helpers/cold-age-class.js.es6
+++ b/app/assets/javascripts/discourse/helpers/cold-age-class.js.es6
@@ -1,6 +1,6 @@
 import registerUnbound from 'discourse/helpers/register-unbound';
 
-export function daysSinceEpoch(dt) {
+function daysSinceEpoch(dt) {
   // 1000 * 60 * 60 * 24 = days since epoch
   return dt.getTime() / 86400000;
 }
@@ -22,3 +22,5 @@ registerUnbound('cold-age-class', function(dt, params) {
 
   return className;
 });
+
+export { daysSinceEpoch };
diff --git a/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 b/app/assets/javascripts/discourse/helpers/fa-icon.js.es6
index cce1f3aa8..f91800fb0 100644
--- a/app/assets/javascripts/discourse/helpers/fa-icon.js.es6
+++ b/app/assets/javascripts/discourse/helpers/fa-icon.js.es6
@@ -1,12 +1,12 @@
 import registerUnbound from 'discourse/helpers/register-unbound';
 
-export function iconClasses(icon, modifier) {
+function iconClasses(icon, modifier) {
   var classes = "fa fa-" + icon;
   if (modifier) { classes += " fa-" + modifier; }
   return classes;
 }
 
-export function iconHTML(icon, label, modifier) {
+function iconHTML(icon, label, modifier) {
   var html = "<i class='" + iconClasses(icon, modifier) + "'";
   if (label) { html += " aria-hidden='true'"; }
   html += "></i>";
@@ -20,3 +20,5 @@ export function iconHTML(icon, label, modifier) {
 registerUnbound('fa-icon', function(icon, params) {
   return new Handlebars.SafeString(iconHTML(icon, params.label, params.modifier));
 });
+
+export { iconClasses, iconHTML };
diff --git a/app/assets/javascripts/discourse/helpers/raw.js.es6 b/app/assets/javascripts/discourse/helpers/raw.js.es6
index ea1687ce6..4c4580e33 100644
--- a/app/assets/javascripts/discourse/helpers/raw.js.es6
+++ b/app/assets/javascripts/discourse/helpers/raw.js.es6
@@ -1,6 +1,6 @@
 import registerUnbound from 'discourse/helpers/register-unbound';
 
-export function renderRaw(template, templateName, params) {
+function renderRaw(template, templateName, params) {
   params.parent = params.parent || this;
 
   if (!params.view) {
@@ -22,3 +22,5 @@ registerUnbound('raw', function(templateName, params) {
 
   return renderRaw.call(this, template, templateName, params);
 });
+
+export { renderRaw };
diff --git a/app/assets/javascripts/discourse/helpers/user-avatar.js.es6 b/app/assets/javascripts/discourse/helpers/user-avatar.js.es6
index 614480481..230e97f50 100644
--- a/app/assets/javascripts/discourse/helpers/user-avatar.js.es6
+++ b/app/assets/javascripts/discourse/helpers/user-avatar.js.es6
@@ -1,6 +1,6 @@
 import registerUnbound from 'discourse/helpers/register-unbound';
 
-export function renderAvatar(user, options) {
+function renderAvatar(user, options) {
   options = options || {};
 
   if (user) {
@@ -44,3 +44,5 @@ export function renderAvatar(user, options) {
 registerUnbound('avatar', function(user, params) {
   return new Handlebars.SafeString(renderAvatar.call(this, user, params));
 });
+
+export { renderAvatar };
diff --git a/app/assets/javascripts/discourse/routes/build-topic-route.js.es6 b/app/assets/javascripts/discourse/routes/build-topic-route.js.es6
index d8cb0e02c..683b53cc6 100644
--- a/app/assets/javascripts/discourse/routes/build-topic-route.js.es6
+++ b/app/assets/javascripts/discourse/routes/build-topic-route.js.es6
@@ -1,7 +1,7 @@
 import { queryParams } from 'discourse/controllers/discovery-sortable';
 
 // A helper to build a topic route for a filter
-export function filterQueryParams(params, defaultParams) {
+function filterQueryParams(params, defaultParams) {
   var findOpts = defaultParams || {};
   if (params) {
     Ember.keys(queryParams).forEach(function(opt) {
@@ -74,3 +74,4 @@ export default function(filter, extras) {
   }, extras);
 }
 
+export { filterQueryParams };
diff --git a/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb b/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb
index 27a860c34..c914fb51f 100644
--- a/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb
+++ b/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb
@@ -1,4 +1,5 @@
 require 'execjs'
+require '6to5'
 
 module Tilt
   class ES6ModuleTranspilerTemplate < Tilt::Template
@@ -14,6 +15,7 @@ module Tilt
 
     def self.create_new_context
       ctx = V8::Context.new(timeout: 5000)
+      ctx.eval("var self = this; #{File.read(ES6to5::Source.path)}")
       ctx.eval("module = {}; exports = {};");
       ctx.load("#{Rails.root}/lib/es6_module_transpiler/support/es6-module-transpiler.js")
       ctx
@@ -107,7 +109,9 @@ module Tilt
     private
 
     def generate_source(scope)
-      "new module.exports.Compiler(#{::JSON.generate(data, quirks_mode: true)}, '#{module_name(scope.root_path, scope.logical_path)}', #{compiler_options}).#{compiler_method}()"
+      js_source = ::JSON.generate(data, quirks_mode: true)
+      js_source = "to5.transform(#{js_source}, {ast: false, blacklist: ['es6.modules', 'useStrict']})['code']"
+      "new module.exports.Compiler(#{js_source}, '#{module_name(scope.root_path, scope.logical_path)}', #{compiler_options}).#{compiler_method}()"
     end
 
     def module_name(root_path, logical_path)
diff --git a/test/javascripts/helpers/qunit-helpers.js.es6 b/test/javascripts/helpers/qunit-helpers.js.es6
index 3aa4b2fcc..111180cc5 100644
--- a/test/javascripts/helpers/qunit-helpers.js.es6
+++ b/test/javascripts/helpers/qunit-helpers.js.es6
@@ -2,7 +2,7 @@
 
 import siteFixtures from 'fixtures/site_fixtures';
 
-export function integration(name, options) {
+function integration(name, options) {
   module("Integration: " + name, {
     setup: function() {
       Ember.run(Discourse, Discourse.advanceReadiness);
@@ -39,13 +39,13 @@ export function integration(name, options) {
   });
 }
 
-export function controllerFor(controller, model) {
+function controllerFor(controller, model) {
   controller = Discourse.__container__.lookup('controller:' + controller);
   if (model) { controller.set('model', model ); }
   return controller;
 }
 
-export function asyncTestDiscourse(text, func) {
+function asyncTestDiscourse(text, func) {
   asyncTest(text, function () {
     var self = this;
     Ember.run(function () {
@@ -54,9 +54,11 @@ export function asyncTestDiscourse(text, func) {
   });
 }
 
-export function fixture(selector) {
+function fixture(selector) {
   if (selector) {
     return $("#qunit-fixture").find(selector);
   }
   return $("#qunit-fixture");
 }
+
+export { integration, controllerFor, asyncTestDiscourse, fixture };