in progress
some reformatings
all methods written, need to make eval