add some functional