redesign and add most functionality
added