external function