use cl-defstruct type instead of property list