Finally Done. Will look over for errors