a lot of functions added