Most implementation done. Need to write tests and document Serializable functions