Change Caller constructor to template constructor to handle different optional parameter. Change all internal function parameter using Caller.