                 }
 
                 regionsTableView.beginUpdates()
-                if let last = _regions.last where !last.isText {
-                    let insertPath = NSIndexPath(forItem: count(_regions), inSection: 0)
-                    _regions.append(.Text(""))
+                if let last = submitableRegions.last where !last.isText {
+                    let insertPath = NSIndexPath(forItem: count(submitableRegions), inSection: 0)
+                    submitableRegions.append(.Text(""))
                     regionsTableView.insertRowsAtIndexPaths([insertPath], withRowAnimation: .Automatic)
                 }
-                generateTableRegions()
+                editableRegions = generateEditableRegions(submitableRegions)
                 regionsTableView.deleteRowsAtIndexPaths(paths, withRowAnimation: .Automatic)
                 regionsTableView.endUpdates()
             }

    public func submitAction() {
        if canPost() {
            stopEditing()
            delegate?.omnibarSubmitted(_regions)
        }
    }

// MARK: Post logic

    public func canPost() -> Bool {
        for region in _regions {
            if !region.empty {
                return true
            }

        reorderingTable(!reordering)
    }

    private func generateReorderableRegions(regions: [OmnibarRegion]) -> [IndexedRegion] {
        let nonEmptyRegions = regions.filter { region in
            return region.editable && !region.empty
        }
        return nonEmptyRegions.map { (region: OmnibarRegion) -> IndexedRegion in
            return (nil, region)
        }
    }

    private func convertReorderableRegions(reorderableRegions: [IndexedRegion]) -> [OmnibarRegion] {
        var regions = [OmnibarRegion]()
        var buffer = NSMutableAttributedString(attributedString: ElloAttributedString.style(""))
        var lastRegionIsText = false
        for (_, region) in reorderableRegions {
            switch region {
            case let .AttributedText(text):
                if count(buffer.string) > 0 {
                    // ensure two newlines between concatenated text regions
                    if !buffer.string.endsWith("\n") {
                        buffer.appendAttributedString(ElloAttributedString.style("\n\n"))
                    }
