Split out behavior from model