custom deserialization work