add some comment, and make sure that we can not use virtual inherience