added a lot new methods