added a lot of functions