still need lots of tests and to implement assignments of variables and maybe one or two things i'm forgetting -- ak