redesign and add a few minor features