         student.loaded = true
         @grid.invalidateRow(student.row)
         @calculateStudentGrade(student)
+
+      if @gotSubmissionChunkCount == @submissionChunkCount
+        @allSubmissionsLoaded.resolve()
+
       @grid.render()
 
     student: (id) =>

      @sortRowsBy (a, b) => @localeSort(a.sortable_name, b.sortable_name)

    getSubmissionsChunks: =>
      @withAllStudents (allStudentsObj) =>
        allStudents = (s for k, s of allStudentsObj)
          .sort (a, b) => @localeSort(a.sortable_name, b.sortable_name)
        loop
          students = allStudents[@chunk_start...(@chunk_start+@options.chunk_size)]
          unless students.length
            @allSubmissionsLoaded.resolve()
            break
          params =
            student_ids: (student.id for student in students)
            response_fields: ['id', 'user_id', 'url', 'score', 'grade', 'submission_type', 'submitted_at', 'assignment_id', 'grade_matches_current_submission', 'attachments', 'late', 'workflow_state', 'excused']
          params['grading_period_id'] = @gradingPeriodToShow if @mgpEnabled && @gradingPeriodToShow && @gradingPeriodToShow != '0' && @gradingPeriodToShow != ''
          $.ajaxJSON(@options.submissions_url, "GET", params, @gotSubmissionsChunk)
          @chunk_start += @options.chunk_size

    gotSubmissionsChunk: (student_submissions) =>
      for data in student_submissions
        student = @student(data.user_id)
        for submission in data.submissions

    allSubmissionsLoaded: $.Deferred()

    constructor: (@options) ->
      @students = {}
      @studentViewStudents = {}
      @rows = []
