add recursive definitions