updated and extended