needs refactoring, but votes are properly constrained now