some design improvement