adding abstract classes for encode/decode
adding property names for encode/decode