use compose instead of chain