controller + learner