now we support recursive marshalling