add some improvments