implemented lots of methods