complete updated version