Created: August 2007 Modified in 2016 to have an end condition.