Revert ea88bc0..fa0ad54

This rolls back to commit ea88bc0a45c6359ec8f06d653b16dc2fb52596ce.
Revert "Revert ea88bc0..fa0ad54"

This reverts commit 01b4c63908bfd97a1b7334bf3dd35053b1be69be.
working version with classes