add generic invoke