add some new features
don't check this in