reformatted source to be clearer