[square] doesn't need to be private