updated further, add gather