     screenRows = [startRow...endRow]
     if longestScreenRow = @model.getLongestScreenRow()
       screenRows.push(longestScreenRow)
-    if @screenRows?
-      screenRows.push(@screenRows...)
-
-    screenRows = screenRows.filter (row) => @constrainRow(row) is row
+    if @screenRowsToMeasure?
+      screenRows.push(@screenRowsToMeasure...)
+
+    screenRows = screenRows.filter @isValidScreenRow.bind(this)
     screenRows.sort (a, b) -> a - b
     _.uniq(screenRows, true)
 

  getEndTileRow: ->
    @constrainRow(@tileForRow(@endRow))

  getScreenRows: ->
    startRow = @getStartTileRow()
    endRow = @constrainRow(@getEndTileRow() + @tileSize)

    zIndex = 0

    for tileStartRow in [@tileForRow(endRow)..@tileForRow(startRow)] by -@tileSize
      rowsWithinTile = []

      while screenRowIndex >= 0
