todo: fix return vals of __decode