This post got long quick.