improve up/down vote logic