a bit change of internal design. add comment.