most of the basic functionality completed