 
   render: (options = {}, callback) ->
     dataFilter = @constructDataFilter(options)
-    filtered = dataFilter(@displayData())
-    @paginate(options.page, filtered.length)
+    filtered = dataFilter(@displayData(options))
+    @data(filtered)
+    @paginate(options.page, @_currentMetadata.total_count or filtered.length)
     rows = @question_table.selectAll('tr.response')
-      .data(filtered.slice((@_page - 1) * @_perPage, @_perPage * @_page))
+      .data(@data())
 
     rows.enter()
       .append('tr')

    @_series_header  = options.series_header or "series_title"
    @_filter_header  = options.filter_header or "filter_title"
    @_tag_header     = options.tag_header or "tag_title"
    @extra_td_callback = options.extra_td_callback or ((d) -> null)
    @initializeQuestionTable()

    @_page          = 1

  data: (d) ->
    if d
      @_data = (x for x in d when x.question == @question_id)
      if @_currentMetadata
        @seriesDomain(d3.scale.ordinal().domain(x for x, y of @_currentMetadata.primary_filter_counts).domain())
        @filterDomain(d3.scale.ordinal().domain(x for x, y of @_currentMetadata.secondary_filter_counts).domain())
        @tagDomain(d3.scale.ordinal().domain(@metadataTags()).domain())
      else
        @seriesDomain(d3.scale.ordinal().domain(x.series_1 for x in @_data).domain())
        @filterDomain(d3.scale.ordinal().domain(x.series_2 for x in @_data).domain())
      return @
    @_data

  metadataTags: ->
    (@_currentMetadata.tags or {})[@question_id] or []

  getData: (source) =>
    d3.json(source, (error, json) =>
