add customizable marshalling