uses blocks instead of selectors