 			oldValue?.treeController = nil
 			content?.treeController = self
 			let to = content?.flattened
-			if oldValue == nil || !UIView.areAnimationsEnabled {
+			if oldValue == nil || !UIView.areAnimationsEnabled || (to?.count ?? 0) >= TransitionItemsLimit || flattened.count >= TransitionItemsLimit {
 				flattened = to ?? []
 				updateIndexes()
 				tableView?.reloadData()

				_children = to
				let range = index..<(index + size)
				let to = flattened
				if range.count < 100 && to.count < 100 {
					treeController.replaceNodes(at: range, with: to)
				}
				else {

		guard let index = node.flatIndex else {return nil}
		return IndexPath(row: index, section: 0)
	}

	@nonobjc public func node(for indexPath: IndexPath) -> TreeNode? {
		return flattened[indexPath.row]
	}

	public func reloadCells(for nodes: [TreeNode], with animation: UITableViewRowAnimation = .fade) {
		let indexPaths = nodes.flatMap({$0.flatIndex == nil ? nil : IndexPath(row: $0.flatIndex!, section:0)})
		if (indexPaths.count > 0) {
