union, clean up ctx <-> source, default hookable