vastly improved apply by using call object