refactored general interface