puts a lot of __init__ code into seperate methods