recursive invocation fixed