basic functionality finally completed