Windowing systems provide core support for separate user-system activities through device independence and allowing multiple simultaneous tasks. Programming tools have evolved from low-level read-evaluation loops to higher-level notification-based and interaction toolkit approaches. User interface management systems introduce conceptual architectures like Seeheim that separate the presentation, dialogue control and application layers, and provide techniques for graphically specifying dialogues.