diff --git a/app/models/ThangType.coffee b/app/models/ThangType.coffee
index 037e1f8d9..407a99e5b 100644
--- a/app/models/ThangType.coffee
+++ b/app/models/ThangType.coffee
@@ -1,6 +1,8 @@
 CocoModel = require('./CocoModel')
 SpriteBuilder = require 'lib/sprites/SpriteBuilder'
 
+buildQueue = []
+
 module.exports = class ThangType extends CocoModel
   @className: "ThangType"
   urlRoot: "/db/thang.type"
@@ -136,7 +138,8 @@ module.exports = class ThangType extends CocoModel
     key = @spriteSheetKey(@options)
     spriteSheet = null
     if @options.async
-      @builder.buildAsync()
+      buildQueue.push @
+      @builder.buildAsync() unless buildQueue.length > 1
       @builder.on 'complete', @onBuildSpriteSheetComplete, @, true, key
       return true
     console.warn 'Building', @get('name'), @options, 'and blocking the main thread.'
@@ -146,6 +149,8 @@ module.exports = class ThangType extends CocoModel
     spriteSheet
 
   onBuildSpriteSheetComplete: (e, key) ->
+    buildQueue = buildQueue.slice(1)
+    buildQueue[0]?.builder.buildAsync()
     @spriteSheets[key] = e.target.spriteSheet
     delete @building[key]
     @trigger 'build-complete'
diff --git a/app/styles/play/spectate.sass b/app/styles/play/spectate.sass
index dd8ee775c..0da4b10ed 100644
--- a/app/styles/play/spectate.sass
+++ b/app/styles/play/spectate.sass
@@ -49,8 +49,6 @@
   //max-width: 1680px   // guideline, but for now let's let it stretch out
   min-width: 1024px
   position: relative
-  #playback-view
-    margin: 0 auto
   #thang-hud
     margin: 0 auto
     display: none
diff --git a/app/views/home_view.coffee b/app/views/home_view.coffee
index 3d9f30db2..aabece44d 100644
--- a/app/views/home_view.coffee
+++ b/app/views/home_view.coffee
@@ -67,12 +67,13 @@ module.exports = class HomeView extends View
   createWizard: (scale=3.7) ->
     spriteOptions = thangID: "Beginner Wizard", resolutionFactor: scale
     @wizardSprite = new WizardSprite @wizardType, spriteOptions
-    @wizardSprite.update()
     wizardDisplayObject = @wizardSprite.displayObject
     wizardDisplayObject.x = 70
     wizardDisplayObject.y = 120
     wizardDisplayObject.scaleX = wizardDisplayObject.scaleY = scale
     wizardDisplayObject.scaleX *= -1
+    @wizardSprite.queueAction 'idle'
+    @wizardSprite.update()
     @stage.addChild wizardDisplayObject
     @stage.update()
 
diff --git a/app/views/play/level_view.coffee b/app/views/play/level_view.coffee
index 8bd77c4ba..c5d697305 100644
--- a/app/views/play/level_view.coffee
+++ b/app/views/play/level_view.coffee
@@ -134,7 +134,6 @@ module.exports = class PlayLevelView extends View
     session = @levelLoader.session
     diff = new Date().getTime() - new Date(session.get('created')).getTime()
     return if showFrequency is 'first-time' and diff > (5 * 60 * 1000)
-    return unless @levelLoader.level.loaded
     articles = @levelLoader.supermodel.getModels Article
     for article in articles
       return unless article.loaded
diff --git a/app/views/play/spectate_view.coffee b/app/views/play/spectate_view.coffee
index 27cfcb1f4..0a935bead 100644
--- a/app/views/play/spectate_view.coffee
+++ b/app/views/play/spectate_view.coffee
@@ -65,10 +65,15 @@ module.exports = class SpectateLevelView extends View
     'ctrl+s': 'onCtrlS'
 
   constructor: (options, @levelID) ->
+    @originalOptions = _.cloneDeep(options)
     console.profile?() if PROFILE_ME
     super options
-    @sessionOne = @getQueryVariable 'session-one'
-    @sessionTwo = @getQueryVariable 'session-two'
+    if options.spectateSessions?
+      @sessionOne = options.spectateSessions.sessionOne
+      @sessionTwo = options.spectateSessions.sessionTwo
+    else
+      @sessionOne = @getQueryVariable 'session-one'
+      @sessionTwo = @getQueryVariable 'session-two'
 
     $(window).on('resize', @onWindowResize)
     @supermodel.once 'error', @onLevelLoadError
@@ -150,6 +155,7 @@ module.exports = class SpectateLevelView extends View
     @initScriptManager()
     @insertSubviews ladderGame: @otherSession?
     @initVolume()
+    
     @originalSessionState = _.cloneDeep(@session.get('state'))
     @register()
     @controlBar.setBus(@bus)
@@ -165,7 +171,6 @@ module.exports = class SpectateLevelView extends View
       name: @otherSession.get('creatorName')
       team: @otherSession.get('team')
 
-
   grabLevelLoaderData: ->
     @session = @levelLoader.session
     @world = @levelLoader.world
@@ -247,18 +252,8 @@ module.exports = class SpectateLevelView extends View
     $(@wasFocusedOn).focus() if @wasFocusedOn
     @wasFocusedOn = null
 
-  onDonePressed: -> @showVictory()
+  onDonePressed: -> return
 
-  onShowVictory: (e) ->
-    $('#level-done-button').show()
-    @showVictory() if e.showModal
-    setTimeout(@preloadNextLevel, 3000)
-
-  showVictory: ->
-    options = {level: @level, supermodel: @supermodel, session:@session}
-    docs = new VictoryModal(options)
-    @openModalView(docs)
-    window.tracker?.trackEvent 'Saw Victory', level: @world.name, label: @world.name
 
   onNewWorld: (e) ->
     @world = e.world
@@ -365,7 +360,7 @@ module.exports = class SpectateLevelView extends View
 
   initSurface: ->
     surfaceCanvas = $('canvas#surface', @$el)
-    @surface = new Surface(@world, surfaceCanvas, thangTypes: @supermodel.getModels(ThangType), playJingle: not @isEditorPreview)
+    @surface = new Surface(@world, surfaceCanvas, thangTypes: @supermodel.getModels(ThangType), playJingle: not @isEditorPreview, spectateGame: true)
     worldBounds = @world.getBounds()
     bounds = [{x:worldBounds.left, y:worldBounds.top}, {x:worldBounds.right, y:worldBounds.bottom}]
     @surface.camera.setBounds(bounds)
@@ -376,7 +371,14 @@ module.exports = class SpectateLevelView extends View
     @god.goalManager = @goalManager
 
   initScriptManager: ->
-    @scriptManager = new ScriptManager({scripts: @world.scripts or [], view:@, session: @session})
+    if @world.scripts
+      nonVictoryPlaybackScripts = _.reject @world.scripts, (script) ->
+        script.id.indexOf("Set Camera Boundaries and Goals") == -1
+    else
+      console.log "World scripts don't exist!"
+      nonVictoryPlaybackScripts = []
+    console.log nonVictoryPlaybackScripts
+    @scriptManager = new ScriptManager({scripts: nonVictoryPlaybackScripts, view:@, session: @session})
     @scriptManager.loadFromSession()
 
   initVolume: ->
@@ -388,11 +390,6 @@ module.exports = class SpectateLevelView extends View
     return if @alreadyLoadedState
     @alreadyLoadedState = true
     state = @originalSessionState
-    if state.frame
-      Backbone.Mediator.publish 'level-set-time', { time: 0, frameOffset: state.frame }
-    if state.selected
-      # TODO: Should also restore selected spell here by saving spellName
-      Backbone.Mediator.publish 'level-select-sprite', { thangID: state.selected, spellName: null }
     if state.playing?
       Backbone.Mediator.publish 'level-set-playing', { playing: state.playing }
 
@@ -428,11 +425,16 @@ module.exports = class SpectateLevelView extends View
     console.log "You want to see the next game!"
     @sessionOne = "53193c8f7a89df21c4d968e9"
     @sessionTwo = "531aa613026834331eac5e7e"
-    @destroy(true)
-    @load()
-    @afterRender()
+    url = "/play/spectate/dungeon-arena?session-one=#{@sessionOne}&session-two=#{@sessionTwo}"
+    Backbone.Mediator.publish 'router:navigate', {
+      route: url,
+      viewClass: SpectateLevelView,
+      viewArgs: [{spectateSessions:{sessionOne: @sessionOne, sessionTwo: @sessionTwo}}, "dungeon-arena"]}
 
-  destroy: (destroyHalfway)->
+    
+    
+
+  destroy: ()->
     @supermodel?.off 'error', @onLevelLoadError
     @levelLoader?.off 'loaded-all', @onLevelLoaderLoaded
     @levelLoader?.destroy()
@@ -440,11 +442,9 @@ module.exports = class SpectateLevelView extends View
     @god?.destroy()
     @goalManager?.destroy()
     @scriptManager?.destroy()
-    unless destroyHalfway
-      $(window).off('resize', @onWindowResize)
+    $(window).off('resize', @onWindowResize)
     delete window.world # not sure where this is set, but this is one way to clean it up
     clearInterval(@pointerInterval)
-
     console.profileEnd?() if PROFILE_ME
     @session?.off 'change:multiplayer', @onMultiplayerChanged, @
     @onLevelLoadError = null
@@ -452,5 +452,4 @@ module.exports = class SpectateLevelView extends View
     @onSupermodelLoadedOne = null
     @preloadNextLevel = null
     @saveScreenshot = null
-    unless destroyHalfway
-      super()
+    super()