swappable listen
cleanup