a lot of layouting and formatting