 		return layout
 	}
 
+	/// Private. Keep track of the current item that is being simulated to be selected, if a selection redirection occurred and simulateAnimation flag is true
+	fileprivate var simulatingScrollItem: Int?
+
 	// MARK: - Functions
 	// MARK: View Lifecycle
 	/**

*/
@objc public protocol AKPickerViewDelegate: UIScrollViewDelegate {
	@objc optional func pickerView(_ pickerView: AKPickerView, didSelectItem item: Int)
	@objc optional func pickerView(_ pickerView: AKPickerView, marginForItem item: Int) -> CGSize
	@objc optional func pickerView(_ pickerView: AKPickerView, configureLabel label: UILabel, forItem item: Int)
}

	/**
	Select a cell whose index is given one and move to it.

	:param: item              An integer value which indicates the index of cell.
	:param: animated          True if the scrolling should be animated, false if it should be immediate.
	*/
	public func selectItem(_ item: Int, animated: Bool = false) {
		self.selectItem(item, animated: animated, notifySelection: true, simulateSelection: false)
	}

	/**
	Private. Select a cell whose index is given one and move to it, with specifying whether it calls delegate method.

	:param: item              An integer value which indicates the index of cell.
	:param: animated          True if the scrolling should be animated, false if it should be immediate.
	:param: notifySelection   True if the delegate method should be called, false if not.
	:param: simulateSelection True if selection animation should be simulated (Selects the item but bounces back to previous one if item can't be selected)
	*/
	fileprivate func selectItem(_ item: Int, animated: Bool, notifySelection: Bool, simulateSelection: Bool) {
		let selectedItem = self.delegate?.pickerView?(self, willSelectItem: item) ?? self.selectedItem
		let previousSelectedItem = self.selectedItem
		self.selectedItem = selectedItem

		if self.simulateAnimation && simulateSelection && selectedItem != item {
			self.simulatingScrollItem = item
			self.collectionView.selectItem(
				at: IndexPath(item: item, section: 0),
				animated: animated,
				scrollPosition: UICollectionViewScrollPosition())
			self.scrollToItem(item, animated: animated)
		} else {
			self.simulatingScrollItem = nil
			self.collectionView.selectItem(
				at: IndexPath(item: selectedItem, section: 0),
				animated: animated,
				scrollPosition: UICollectionViewScrollPosition())
			self.scrollToItem(selectedItem, animated: animated)
			if notifySelection && (alwaysNotify || selectedItem != previousSelectedItem) {
				self.delegate?.pickerView?(self, didSelectItem: selectedItem)
			}
		}
	}

