updated: more binding and tail calls