abstracting behviours from agents