making use of new instance methods to save the huge construction calls, passing in more objects via contructors