refactor shadow interface