added a lot more methods