Add abstract class, for shared methods + implement Traversable interface + enforce toJsonData method