added fn.apply
back into pub function