takes variable length of params