add more interface, change mechanics