more general harvester function