add pack/unpack interface