up to polymorphism
updated
add notes