new throughput function