New class hierarchy
last version