added itterator and observer patterns