added recursive support