restructured the interface