a bunch more design and JS changes