polling for input changes sucks