refactored rave()