added custom serializer and deserializer, modified the layout