refactored a bit, input circle now much more powerful