lots of class additions and changes