frankenstein user interaction handler. Needs refactory.