New classes, changed to abstract some other classes.