add sub function