implemented compose