abstract select