more componentized design