inproved, more generalized voting (more generic name? own package?)