decoupled component logic