Rehaul. Lots of cleanup. Need to implement some more things before it's finished.