interfaces actually work this time