final updated version