add encode/decode fns