interface overhaul with some code golfing