See the implementation in behaviors