serializable and externalizable interface