refactor structure, add caption