added extend() and partial()