     
     public func insert(rowElement: ALRowElement, atTheBeginingOfSection section: Int, animation: UITableViewRowAnimation = .top) -> Bool {
         
-        return self.insert(rowElement: rowElement, section: section, row: SectionInsert.begining.rawValue)
+        return self.insert(rowElement: rowElement, section: section, row: SectionPosition.begining.rawValue)
     }
     
     public func insert(rowElements: Array<ALRowElement>, atTheBeginingOfSection section: Int, animation: UITableViewRowAnimation = .top) -> Bool {
         
-        return self.insert(rowElements: rowElements, section: section, row: SectionInsert.begining.rawValue)
+        return self.insert(rowElements: rowElements, section: section, row: SectionPosition.begining.rawValue)
     }
     
     public func insert(rowElement: ALRowElement, atTheEndOfSection section: Int, animation: UITableViewRowAnimation = .top) -> Bool {
         
-        return self.insert(rowElement: rowElement, section: section, row: SectionInsert.end.rawValue)
+        return self.insert(rowElement: rowElement, section: section, row: SectionPosition.end.rawValue)
     }
     
     public func insert(rowElements: Array<ALRowElement>, atTheEndOfSection section: Int, animation: UITableViewRowAnimation = .top) -> Bool {
         
-        return self.insert(rowElements: rowElements, section: section, row: SectionInsert.end.rawValue)
+        return self.insert(rowElements: rowElements, section: section, row: SectionPosition.end.rawValue)
+    }
+    
+    //MARK: - Managing the removal of new cells
+    
+    public func remove(rowElement: ALRowElement, at indexPath: IndexPath, animation: UITableViewRowAnimation = .top) -> Bool {
+        
+        return self.remove(rowElement: rowElement, section: indexPath.section, row: indexPath.row, animation: animation)
+    }
+    
+    public func remove(rowElement: ALRowElement, section: Int, row: Int, animation: UITableViewRowAnimation = .top) -> Bool {
+        
+        if let indexPathes = self.getIndexPathes(section: section, row: row, numberOfRowElements: 1) {
+            self.tableView?.beginUpdates()
+            self.tableView?.deleteRows(at: indexPathes, with: animation)
+            self.tableView?.endUpdates()
+            return true
+        }
+        
+        return false
+    }
+    
+    public func remove(rowElements: Array<ALRowElement>, at indexPath: IndexPath, animation: UITableViewRowAnimation = .top) -> Bool {
+        
+        return self.remove(rowElements: rowElements, section: indexPath.section, row: indexPath.row, animation: animation)
+    }
+    
+    public func remove(rowElements: Array<ALRowElement>, section: Int, row: Int, animation: UITableViewRowAnimation = .top) -> Bool {
+        
+        if let indexPathes = self.getIndexPathes(section: section, row: row, numberOfRowElements: rowElements.count) {
+            self.tableView?.beginUpdates()
+            self.tableView?.deleteRows(at: indexPathes, with: animation)
+            self.tableView?.endUpdates()
+            return true
+        }
+        
+        return false
+    }
+    
+    public func remove(rowElement: ALRowElement, atTheBeginingOfSection section: Int, animation: UITableViewRowAnimation = .top) -> Bool {
+        
+        return self.remove(rowElement: rowElement, section: section, row: SectionPosition.begining.rawValue)
+    }
+    
+    public func remove(rowElements: Array<ALRowElement>, atTheBeginingOfSection section: Int, animation: UITableViewRowAnimation = .top) -> Bool {
+        
+        return self.remove(rowElements: rowElements, section: section, row: SectionPosition.begining.rawValue)
+    }
+    
+    public func remove(rowElement: ALRowElement, atTheEndOfSection section: Int, animation: UITableViewRowAnimation = .top) -> Bool {
+        
+        return self.remove(rowElement: rowElement, section: section, row: SectionPosition.end.rawValue)
+    }
+    
+    public func remove(rowElements: Array<ALRowElement>, atTheEndOfSection section: Int, animation: UITableViewRowAnimation = .top) -> Bool {
+        
+        return self.remove(rowElements: rowElements, section: section, row: SectionPosition.end.rawValue)
+    }
+    
+    //MARK: - Managing the replacement of new cells
+    
+    public func replace(rowElements: Array<ALRowElement>, at indexPath: IndexPath, animation: UITableViewRowAnimation = .top) -> Bool {
+        
+        return self.replace(rowElements: rowElements, section: indexPath.section, row: indexPath.row, animation: animation)
+    }
+    
+    public func replace(rowElements: Array<ALRowElement>, section: Int, row: Int, animation: UITableViewRowAnimation = .top) -> Bool {
+        
+        if let indexPathes = self.getIndexPathes(section: section, row: row, numberOfRowElements: rowElements.count) {
+            self.tableView?.beginUpdates()
+            self.tableView?.reloadRows(at: indexPathes, with: animation)
+            self.tableView?.endUpdates()
+            return true
+        }
+        
+        return false
     }
     
     //MARK: - Private methods

    @objc optional func tableViewWillEndDragging()
}

enum SectionInsert: Int {
    case begining = -1
    case end = -2
}

        if !self.checkParameters(section: section, row: row - 1) {
            return nil
        }
        
        var mutableRow = row
        switch mutableRow {
        case SectionPosition.begining.rawValue:
            mutableRow = 0
        case SectionPosition.end.rawValue:
            mutableRow = self.sectionManager.getNumberOfRows(in: section)
        default:
            break
        }
        
        var indexPathes: Array<IndexPath> = [IndexPath]()
