                 }
             }
             else if scrollDirectionToHandle == SZScrollDirection.FromMaxToMin {
-                if mainItem.minIndex <= newMainItem.minIndex {
-                    for mainIndex in mainItem.minIndex ... newMainItem.minIndex {
+                let maxIndexValue = operation == .Place ? newMainItem.minIndex + 1 : newMainItem.minIndex
+                if mainItem.minIndex < maxIndexValue {
+                    for mainIndex in mainItem.minIndex ... maxIndexValue {
                         for oppositeIndex in newOppositeItem.minIndex ... newOppositeItem.maxIndex {
                             let columnIndex = z==0 ? mainIndex : oppositeIndex
                             let rowIndex    = z==0 ? oppositeIndex : mainIndex
-                            indexesToPlace.append(SZIndexPath(rowSectionIndex: 0,
+                            indexes.append(SZIndexPath(rowSectionIndex: 0,
                                 columnSectionIndex: 0,
                                 rowIndex: rowIndex,
                                 columnIndex: columnIndex))

            }
        }
        
        let indexesToPlace = findCellsToPlaceForScrollDirection(scrollDirection, andBorderIndexes: newBorderIndexes)
        for indexPath in indexesToPlace {
            placeCellWithIndexPath(indexPath)
        }

        borderIndexes = newBorderIndexes
    }

    func findCellsForOperation(operation: SZTableViewInternalCellOperation,
            andNewBorderIndexes newBorderIndexes: SZBorderIndexes) -> [SZIndexPath]
    {
        var indexes = [SZIndexPath]()
        
        for z in 0...1 { // 0 - for columns, 1 - for rows
            
            let mainItem        = z==0 ? borderIndexes.column : borderIndexes.row
            let oppositeItem    = z==0 ? borderIndexes.row : borderIndexes.column
            let newMainItem     = z==0 ? newBorderIndexes.column : newBorderIndexes.row
