updated with structured attrs