Assignment #4. reduced to 8 methods. looks better.