implement compose