made most of the methods private