refactored growl implementation