add interface and reflect