broken out and actually using try_take (name changed)