add marshallable interface and half of marshallable abstract implementation