         push: (record) -> @inner.push record
         format: formatter
         value: -> @inner.value() / data.getAggregator(@selector...).inner.value()
+        numInputs: wrapped(x...)().numInputs
 
 #default aggregators & renderers use US naming and number formatting
 aggregators = do (tpl = aggregatorTemplates) -> 

                rendererOptions: opts.rendererOptions
                cols: [], rows: []

            vals = []
            @find(".pvtRows li span.pvtAttr").each -> subopts.rows.push $(this).data("attrName")
            @find(".pvtCols li span.pvtAttr").each -> subopts.cols.push $(this).data("attrName")
            @find(".pvtVals li span.pvtAttr").each -> vals.push $(this).data("attrName")

            subopts.aggregatorName = aggregator.val()
            subopts.vals = vals

        push:  -> @count++
        value: -> @count
        format: formatter
        numInputs: 0

    countUnique: (formatter=usFmtInt) -> ([attr]) -> (data, rowKey, colKey) ->
        uniq: []
        push: (record) -> @uniq.push(record[attr]) if record[attr] not in @uniq
        value: -> @uniq.length
        format: formatter
        numInputs: 1

    listUnique: (sep) -> ([attr]) -> (data, rowKey, colKey)  ->
        uniq: []
        push: (record) -> @uniq.push(record[attr]) if record[attr] not in @uniq
        value: -> @uniq.join sep
        format: (x) -> x
        numInputs: 1

    sum: (formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->
        sum: 0
        push: (record) -> @sum += parseFloat(record[attr]) if not isNaN parseFloat(record[attr])
        value: -> @sum
        format: formatter
        numInputs: 1

    average:  (formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->
        sum: 0
