     override open class var layoutName: String { return "Column" }
     override open class var layoutKey: String { return "column" }
 
+    fileprivate var mainPaneCount: Int = 1
+    fileprivate var mainPaneRatio: CGFloat = 0.5
+
     override open func reflowOperationForScreen(_ screen: NSScreen, withWindows windows: [SIWindow]) -> ReflowOperation {
         return ColumnReflowOperation(screen: screen, windows: windows, layout: self, windowActivityCache: windowActivityCache)
     }
+
+    override public func expandMainPane() {
+        mainPaneRatio = max(0, mainPaneRatio + UserConfiguration.shared.windowResizeStep())
+    }
+
+    override public func shrinkMainPane() {
+        mainPaneRatio = max(0, mainPaneRatio - UserConfiguration.shared.windowResizeStep())
+    }
+
+    override public func increaseMainPaneCount() {
+        mainPaneCount += 1
+    }
+
+    override public func decreaseMainPaneCount() {
+        mainPaneCount = max(1, mainPaneCount - 1)
+    }
 }

    }

    fileprivate override func main() {
        if windows.count == 0 {
            return
        }

        let screenFrame = adjustedFrameForLayout(screen)
        let windowWidth = screenFrame.width / CGFloat(windows.count)

        let focusedWindow = SIWindow.focused()

        let frameAssignments = windows.reduce([]) { frameAssignments, window -> [FrameAssignment] in
            var assignments = frameAssignments
            let originX = screenFrame.origin.x + CGFloat(frameAssignments.count) * windowWidth
            let windowFrame = CGRect(x: originX, y: screenFrame.origin.y, width: windowWidth, height: screenFrame.size.height)

            let frameAssignment = FrameAssignment(frame: windowFrame, window: window, focused: window.isEqual(to: focusedWindow), screenFrame: screenFrame)


            return assignments
        }

        guard !isCancelled else {
            return
        }

