lots of updated functionality