Refactored to use behaviors more extensively