Add non-blocking version