updated and clean