made non-destructive pushl and compose