diff --git a/app/lib/GPlusHandler.coffee b/app/lib/GPlusHandler.coffee
index e69c7db79..411b1e26b 100644
--- a/app/lib/GPlusHandler.coffee
+++ b/app/lib/GPlusHandler.coffee
@@ -91,7 +91,9 @@ module.exports = GPlusHandler = class GPlusHandler extends CocoClass
     @saveIfAllDone()
 
   saveIfAllDone: =>
+    console.debug 'Save if all done. Person loaded:', @personLoaded, 'and email loaded:', @emailLoaded
     return unless @personLoaded and @emailLoaded
+    console.debug 'Email, gplusID:', me.get('email'), me.get('gplusID')
     return unless me.get('email') and me.get('gplusID')
 
     Backbone.Mediator.publish 'auth:logging-in-with-gplus', {}
@@ -104,12 +106,16 @@ module.exports = GPlusHandler = class GPlusHandler extends CocoClass
     patch.email = me.get('email')
     wasAnonymous = me.get('anonymous')
     @trigger 'logging-into-codecombat'
+    console.debug('Logging into GPlus.')
     me.save(patch, {
       patch: true
       type: 'PUT'
-      error: backboneFailure,
+      error: ->
+        console.debug('Logging into GPlus fail.', arguments)
+        backboneFailure(arguments...)
       url: "/db/user?gplusID=#{gplusID}&gplusAccessToken=#{@accessToken.access_token}"
       success: (model) ->
+        console.debug('GPLus login success!')
         window.location.reload() if wasAnonymous and not model.get('anonymous')
     })
 
diff --git a/app/lib/surface/Lank.coffee b/app/lib/surface/Lank.coffee
index 4418ffbea..16d76032d 100644
--- a/app/lib/surface/Lank.coffee
+++ b/app/lib/surface/Lank.coffee
@@ -491,6 +491,7 @@ module.exports = Lank = class Lank extends CocoClass
       bar = createProgressBar(healthColor)
       @options.floatingLayer.addCustomGraphic(key, bar, bar.bounds)
 
+    hadHealthBar = @healthBar
     @healthBar = new createjs.Sprite(@options.floatingLayer.spriteSheet)
     @healthBar.gotoAndStop(key)
     offset = @getOffset 'aboveHead'
@@ -499,6 +500,8 @@ module.exports = Lank = class Lank extends CocoClass
     @options.floatingLayer.addChild @healthBar
     @updateHealthBar()
     @lastHealth = null
+    if not hadHealthBar
+      @listenTo @options.floatingLayer, 'new-spritesheet', @addHealthBar
 
   getActionProp: (prop, subProp, def=null) ->
     # Get a property or sub-property from an action, falling back to ThangType
diff --git a/app/lib/surface/Surface.coffee b/app/lib/surface/Surface.coffee
index 704f41b80..016fc81d6 100644
--- a/app/lib/surface/Surface.coffee
+++ b/app/lib/surface/Surface.coffee
@@ -258,7 +258,9 @@ module.exports = Surface = class Surface extends CocoClass
       createjs.Tween.removeTweens(@)
       @currentFrame = @scrubbingTo
 
-    @scrubbingTo = Math.min(Math.round(progress * (@world.frames.length - 1)), @world.frames.length - 1)
+    @scrubbingTo = Math.round(progress * (@world.frames.length - 1))
+    @scrubbingTo = Math.max @scrubbingTo, 1
+    @scrubbingTo = Math.min @scrubbingTo, @world.frames.length - 1
     @scrubbingPlaybackSpeed = Math.sqrt(Math.abs(@scrubbingTo - @currentFrame) * @world.dt / (scrubDuration or 0.5))
     if scrubDuration
       t = createjs.Tween
@@ -402,7 +404,7 @@ module.exports = Surface = class Surface extends CocoClass
     @playing = (e ? {}).playing ? true
     @setPlayingCalled = true
     if @playing and @currentFrame >= (@world.totalFrames - 5)
-      @currentFrame = 0
+      @currentFrame = 1  # Go back to the beginning (but not frame 0, that frame is weird)
     if @fastForwardingToFrame and not @playing
       @fastForwardingToFrame = null
 
diff --git a/app/styles/play/level/level-dialogue-view.sass b/app/styles/play/level/level-dialogue-view.sass
index 298245a73..f29d65f8a 100644
--- a/app/styles/play/level/level-dialogue-view.sass
+++ b/app/styles/play/level/level-dialogue-view.sass
@@ -55,7 +55,7 @@
       line-height: 20px
 
       strong
-        color: #09B057
+        color: #FFCCAA
 
       .hud-hint
         font-weight: normal
diff --git a/app/styles/play/level/tome/spell.sass b/app/styles/play/level/tome/spell.sass
index ed6a9c1a8..b3b0a82ec 100644
--- a/app/styles/play/level/tome/spell.sass
+++ b/app/styles/play/level/tome/spell.sass
@@ -99,7 +99,7 @@
       @include gradient-striped()
       outline: 2px outset #0099ff
       @include box-shadow(1px 1px 4px black)
-    &.playback-ended .executing
+    &.playback-ended .executing, &.user-code-problem .executing
       background-color: rgba(50, 255, 80, 0.65)
       outline: 0
       @include box-shadow(0 0 0px black)
@@ -125,34 +125,29 @@
       // TODO: Pulses too quickly during playback
       @include animation(pulseRedBackground 1s infinite)
 
-    &:not(.playback-ended)
+    &:not(.playback-ended):not(.user-code-problem)
       .executing:not(.ace_gutter-cell)
         background-size: 40px 40px
         @include animation(progress-bar-stripes 0.5s linear infinite)
 
-    .ace_gutter-cell.executing:not(.ace_error):not(.ace_warning):not(.ace_info):after
-      
-      // Experimenting with a larger executing-line-pointer
-      content: "\e072"
-      position: relative
-      top: -31px
-      left: -39px
-      display: inline-block
-      font-family: 'Glyphicons Halflings'
-      font-style: normal
-      font-weight: normal
-      line-height: 1
-      color: white
-      text-shadow: 0 0 5px black, 0 0 5px black, 0 0 5px black
-      font-size: 39px
-      -webkit-font-smoothing: antialiased
-      -moz-osx-font-smoothing: grayscale
-      
-      
-      //display: block
-      //margin-left: 1px
-      //background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMjgwMTE3NDA3MjA2ODExOEE2REU4Q0M1MTM1MkIxRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpBQjVEQUNDMzQ4RUIxMUUxOEVGRUUyNzFENDM3RDVFMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBQjVEQUNDMjQ4RUIxMUUxOEVGRUUyNzFENDM3RDVFMCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTU1MjE3RDIzMTIwNjgxMThEQkI4NTlBMjQ1QTEwOTUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDI4MDExNzQwNzIwNjgxMThBNkRFOENDNTEzNTJCMUYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7SazaGAAAAiElEQVR42mL8//8/AzUBEwOVweA3kAWboI2jCyhgDwBx4ZH9ey5Qy4UOQHweaHg/EAtQ08sFUIMDqBmGCkC8HmgoCCtQM1ICoK5toGYsg8KzHmjo+UGbDj8AcSMwORkSnQ7xgA3QtPmApISNBTyAGrSBGl6eAMSGxBhGyIVkZT3G0fKQYgAQYACL+C2ZM6PC7AAAAABJRU5ErkJggg==)
-      //background-position: 0px center
+    &:not(.user-code-problem)
+      .ace_gutter-cell.executing:not(.ace_error):not(.ace_warning):not(.ace_info):after
+
+        // Experimenting with a larger executing-line-pointer
+        content: "\e072"
+        position: relative
+        top: -31px
+        left: -39px
+        display: inline-block
+        font-family: 'Glyphicons Halflings'
+        font-style: normal
+        font-weight: normal
+        line-height: 1
+        color: white
+        text-shadow: 0 0 5px black, 0 0 5px black, 0 0 5px black
+        font-size: 39px
+        -webkit-font-smoothing: antialiased
+        -moz-osx-font-smoothing: grayscale
 
     .ace_gutter-cell.executed:not(.ace_error):not(.ace_warning):not(.ace_info)
       margin-left: 1px
diff --git a/app/views/modal/AuthModal.coffee b/app/views/modal/AuthModal.coffee
index 5ae45badc..aa4c25cad 100644
--- a/app/views/modal/AuthModal.coffee
+++ b/app/views/modal/AuthModal.coffee
@@ -126,8 +126,6 @@ module.exports = class AuthModal extends ModalView
     step.done = false for step in @gplusAuthSteps
     handler = application.gplusHandler
     
-    @renderGPlusAuthChecklist()
-    
     @listenToOnce handler, 'logged-in', ->
       @gplusAuthSteps[0].done = true
       @renderGPlusAuthChecklist()
diff --git a/app/views/play/level/LevelPlaybackView.coffee b/app/views/play/level/LevelPlaybackView.coffee
index af4ef02f2..5f60d900e 100644
--- a/app/views/play/level/LevelPlaybackView.coffee
+++ b/app/views/play/level/LevelPlaybackView.coffee
@@ -210,6 +210,7 @@ module.exports = class LevelPlaybackView extends CocoView
   onProgressHover: (e, offsetX) ->
     timeRatio = @$progressScrubber.width() / @totalTime
     offsetX ?= e.clientX - $(e.target).closest('#timeProgress').offset().left
+    offsetX = Math.max 0, offsetX
     @newTime = offsetX / timeRatio
     @updatePopupContent()
     @timePopup?.onHover e