refactor behaviours