added recursive definition