add interface overhauled