a big while loop