not recursive, one less class