All functionality implemented for the demo. May want to do some cleanups with the look before showing it.