new compose functionality