fix bugs & tidy code