diff --git a/app/assets/main.html b/app/assets/main.html
index 810cf0cf9..3bb759a1f 100644
--- a/app/assets/main.html
+++ b/app/assets/main.html
@@ -28,11 +28,20 @@
   <link rel="shortcut icon" href="/images/favicon.ico">
   <link rel="stylesheet" href="/stylesheets/app.css">
 
+  <!-- IE9 doesn't support defer attribute: https://github.com/h5bp/lazyweb-requests/issues/42 -->
+  <!--[if IE 9]>
+  <script src="/lib/ace/ace.js"></script>
+  <script src="/javascripts/box2d.js"></script>
+  <script src="/javascripts/vendor.js"></script>
+  <script src="/javascripts/aether.js"></script>
+  <script src="/javascripts/app.js"></script>
+  <![endif]-->
+  <![if (gt IE 9)|(!IE)]>
   <script src="/lib/ace/ace.js" defer></script>
-  <!--[if IE 9]><script src="/javascripts/box2d.js"></script><![endif]-->
   <script src="/javascripts/vendor.js" defer></script>
   <script src="/javascripts/aether.js" defer></script>
   <script src="/javascripts/app.js" defer></script> <!-- it's all Backbone! -->
+  <![endif]>
   <script>
 
     // Placeholder for iPad, which inspects the user object at the bottom of an injected page.
diff --git a/app/lib/LevelBus.coffee b/app/lib/LevelBus.coffee
index 750e5fbc1..adbf25c28 100644
--- a/app/lib/LevelBus.coffee
+++ b/app/lib/LevelBus.coffee
@@ -30,9 +30,9 @@ module.exports = class LevelBus extends Bus
     super(arguments...)
     @changedSessionProperties = {}
     if document.location.href.search('codecombat.com') isnt -1
-      @saveSession = _.debounce(@reallySaveSession, 10000, {maxWait: 30000})  # Save us during HoC
+      @saveSession = _.debounce(@reallySaveSession, 4000, {maxWait: 10000})  # Save slower on production.
     else
-      @saveSession = _.debounce(@reallySaveSession, 1000, {maxWait: 5000})  # Not this fast during HoC
+      @saveSession = _.debounce(@reallySaveSession, 1000, {maxWait: 5000})  # Save quickly in development.
     @playerIsIdle = false
 
   init: ->
diff --git a/app/models/CocoModel.coffee b/app/models/CocoModel.coffee
index e6f649bc4..e9a687882 100644
--- a/app/models/CocoModel.coffee
+++ b/app/models/CocoModel.coffee
@@ -19,10 +19,10 @@ class CocoModel extends Backbone.Model
     @on 'error', @onError, @
     @on 'add', @onLoaded, @
     @saveBackup = _.debounce(@saveBackup, 500)
-    @usesVersions = @schema().properties.version?
+    @usesVersions = @schema()?.properties?.version?
 
   backupKey: ->
-    if @usesVersions then @id else @id + ':' + @attributes.__v  # TODO: doesn't work because __v doesn't actually increment?
+    if @usesVersions then @id else @id + ':' + @attributes.__v  # TODO: doesn't work because __v doesn't actually increment. #2061
 
   setProjection: (project) ->
     return if project is @project
diff --git a/app/models/LevelSession.coffee b/app/models/LevelSession.coffee
index cc30de4b8..cf8f21a45 100644
--- a/app/models/LevelSession.coffee
+++ b/app/models/LevelSession.coffee
@@ -59,6 +59,7 @@ module.exports = class LevelSession extends CocoModel
     state.difficulty = (state.difficulty ? 0) + 1
     delete state.lastUnsuccessfulSubmissionTime
     @set 'state', state
+    @save()
 
   timeUntilResubmit: ->
     state = @get('state') ? {}
diff --git a/app/views/play/level/tome/SpellView.coffee b/app/views/play/level/tome/SpellView.coffee
index cde4b7ecc..7f0e3465d 100644
--- a/app/views/play/level/tome/SpellView.coffee
+++ b/app/views/play/level/tome/SpellView.coffee
@@ -733,9 +733,6 @@ module.exports = class SpellView extends CocoView
     hashValue = aether.raw + aetherProblem.message
     return if hashValue of @savedProblems
     @savedProblems[hashValue] = true
-    if Math.random() > 0.01
-      # Let's only save a tiny fraction of these during HoC to reduce writes.
-      return
 
     # Save new problem
     @userCodeProblem = new UserCodeProblem()