lots of work and formatting