support external functions