final version clean and unclean