updatae design
add new method, need tests