add some more useful function