     public func collectionView(collectionView: UICollectionView, shouldSelectItemAtIndexPath indexPath: NSIndexPath) -> Bool {
         
         if let
+            delegate = self.delegate,
             dateUserSelected = dateFromPath(indexPath),
-            delegate = self.delegate,
             cell = collectionView.cellForItemAtIndexPath(indexPath) as? JTAppleDayCell {
-            if cellWasNotDisabledByTheUser(cell) {
+            if cellWasNotDisabledOrHiddenByTheUser(cell) {
                 let cellState = cellStateFromIndexPath(indexPath, withDate: dateUserSelected)
-                delegate.calendar(self, canSelectDate: dateUserSelected, cell: cell.cellView, cellState: cellState)
-                return true
-            }
-        }
-        
-        return false // if date is out of scope
-    }
-    
-    func cellWasNotDisabledByTheUser(cell: JTAppleDayCell) -> Bool {
+                return delegate.calendar(self, canSelectDate: dateUserSelected, cell: cell.cellView, cellState: cellState)
+            }
+        }
+        return false
+    }
+    
+    func cellWasNotDisabledOrHiddenByTheUser(cell: JTAppleDayCell) -> Bool {
         return cell.cellView.hidden == false && cell.cellView.userInteractionEnabled == true
     }
     /// Tells the delegate that the item at the specified path was deselected. The collection view calls this method when the user successfully deselects an item in the collection view. It does not call this method when you programmatically deselect items.

    /// Asks the delegate if the specified item should be deselected. true if the item should be deselected or false if it should not.
    public func collectionView(collectionView: UICollectionView, shouldDeselectItemAtIndexPath indexPath: NSIndexPath) -> Bool {
        if let
            dateDeSelectedByUser = dateFromPath(indexPath),
            delegate = self.delegate,
            cell = collectionView.cellForItemAtIndexPath(indexPath) as? JTAppleDayCell {
            let cellState = cellStateFromIndexPath(indexPath, withDate: dateDeSelectedByUser)
            delegate.calendar(self, canDeselectDate: dateDeSelectedByUser, cell: cell.cellView, cellState:  cellState)

                refreshIndexPathIfVisible(anUnselectedCounterPartIndexPath)
            }
            
            delegate.calendar(self, didDeselectDate: dateDeselectedByUser, cell: selectedCell?.cellView, cellState: cellState)
        }
    }
