fixed recursive invocation