added a bunch of function