cleaner input interface
overhaul input/output