added lots of functions