new disign and add feature tests