     return unless @supermodel?.finished() and @sessionsLoaded()
     @denormalizeSession()
     @loadLevelSounds()
-    app.tracker.updatePlayState(@level, @session)
+    app.tracker.updatePlayState(@level, @session) unless @headless
     @updateCompleted = true
 
   denormalizeSession: ->
-    return if @sessionDenormalized or @spectateMode
+    return if @headless or @sessionDenormalized or @spectateMode
     patch =
       'levelName': @level.get('name')
       'levelID': @level.get('slug') or @level.id

      @opponentSession.once 'sync', @onSessionLoaded, @

  sessionsLoaded: ->
    @session.loaded and ((not @opponentSession) or @opponentSession.loaded)

  onSessionLoaded: ->

  # Session Loading

  loadSession: ->
    return if @headless
    if @sessionID
      url = "/db/level_session/#{@sessionID}"
    else
