added compose() and dot()