most functionality implemented