modified and add interface