most of the basic functionality working