cleaned and updated