divided into methods