added composite function