updated and fixed