add some optimozation