Revert "Revert "class""

This reverts commit 89745337f1a2150171e015311c305d2665ed93bc.
Revert f4c6430..92c3071

This rolls back to commit f4c643044e84452f4912e146b555870229b17865.