completed implementing most features