         set(newGridLineOverlapFactor) {
             guard newGridLineOverlapFactor != self.__gridLineOverlapFactor else { return }
             self.__gridLineOverlapFactor = newGridLineOverlapFactor
-            self._updateLineLayers(self._updatePositionAndLength)
-            self.setNeedsLayout()
         }
     }
     

    private func _purgeRows(downTo numOfRows: UInt) {
        self._purgeLines(where: {
            $0.orientation == .horizontal &&
                $0._positionIndex.value > (numOfRows - 1)
        })
    }
    
    private func _purgeColumns(downTo numOfRows: UInt) {
        self._purgeLines(where: {
            $0.orientation == .vertical &&
                $0._positionIndex.value > (numOfRows - 1)
        })
    }
    

    // Private Helpers
    private func _updateLineLayers(_ block: ((LineLayer) -> Void)) {
        self._lineLayers.forEach(block)
    }
}


// MARK: Layout
private extension GridLayer {
    func _preferredFrameSize() -> CGSize {
        return CGSize(width: self._width(), height: self._height())
    }
    
    func _layoutSublayers() {
        self._lineLayers.forEach(self._updatePosition)
    }
    
    // Helpers
    func _sizeFrame() {
        let frameSize: CGSize = self.preferredFrameSize()
        self.frame.size = frameSize
        self._borderLayer?.frame.size = frameSize
    }
    
    func _width() -> CGFloat {
        return ((2 * self.gridInsetFactor) + self._zeroedNumOfColumns) * self.columnWidth
    }
    
    func _height() -> CGFloat {
        return ((2 * self.gridInsetFactor) + self._zeroedNumOfRows) * self.rowHeight
    }
}

