better componentization