     }
     
     // MARK: - Positioning
-    func segmentUnderPoint(point: NSPoint) -> TaskSegment? {
+    func segmentUnder(point: NSPoint) -> TaskSegment? {
         // Reverse so search finds the top-most segment always
         guard let segments = dataSource?.segmentsForTimelineView(self).reversed() else {
             return nil
         }
         
+        let startDate = self.startDate
+        let endDate = self.endDate
+        let bounds = self.boundsForSegments()
+        
         for segment in segments {
-            if(frameFor(segment: segment).contains(point)) {
+            let frame = frameFor(segment: segment, withStartDate: startDate, endDate: endDate, inBounds: bounds)
+            if(frame.contains(point)) {
                 return segment
             }
         }

        
        dragStartPoint = point
        
        let segment = segmentUnderPoint(point: point)
        
        let isLastSegment = mouseSegment?.id == segment?.id
        

        let windowPoint = event.locationInWindow
        let point = self.convert(windowPoint, from: nil)
        
        if let segment = segmentUnder(point: point) {
            delegate?.timelineView(self, didTapSegment: segment, with: event)
        } else {
            if(self.bounds.contains(point)) {
