inner function support