Moved some stuff around.  Used 3rd party code