new interface refactor