move change logic into container widget