some design improvment