leon-p: I don't see why a protocol that returns coordinates and dimensions restricts you to dynamic tiling only. Why not have layouts generated based upon the number of windows _and_ some internal state, with an interface for manipulating the state exposed through commands? These commands could be bound to keyboard shortcuts at the top level, allowing the user to manipulate the layout regardless of its data structure. A nice thing about this approach include that you can implement complex layouts simply by nesting. For tree layouts, you simply provide a "node" layout that recurses. A stack layout is simply a recursive hsplit. Scratchpads could be implemented as a layout that has two sub-layouts: a top one for the scratchpad, and the bottom for whatever else. etc. I think that this abstraction decouples the layout and window management nicely - would you explain further why you perceive the two as necessarily linked?