introduced full/sparse subclasses, separated parts of the functionality