add description and code cleaning