much better passing framework