     label.sizeToFit()
     label.frame = CGRect(origin: CGPoint.zero, size: CGSize(width: 375, height: 50))
 
+    layoutNowLine()
+    layoutEvents()
+  }
+
+  func layoutNowLine() {
     let size = CGSize(width: bounds.size.width, height: 20)
     let rect = CGRect(origin: CGPoint.zero, size: size)
     nowLine.date = date
     nowLine.frame = rect
     nowLine.center.y = dateToY(date)
-    relayoutEvents()
-  }
-
-  func relayoutEvents() {
+  }
+
+  func layoutEvents() {
     if eventViews.isEmpty {return}
 
     let day = DTTimePeriod(size: .Day, startingAt:date)

    _eventHolder = eventViews.filter {$0.datePeriod.overlapsWith(day)}
      .sort {$0.datePeriod.StartDate.isEarlierThan($1.datePeriod.StartDate)}

    let datePeriods = _eventHolder.map {$0.datePeriod}
    let zipped = Array(Zip2Sequence(datePeriods, _eventHolder))

    var result = [[(DTTimePeriod, EventView)]]()
    var temporaryArray = [(DTTimePeriod, EventView)]()

    for tuple in zipped {
      if temporaryArray.isEmpty {
        temporaryArray.append(tuple)
        continue
      }

      if temporaryArray.last!.0.overlapsWith(tuple.0) {
        temporaryArray.append(tuple)
      } else {
        result.append(temporaryArray)
        temporaryArray.removeAll()
      }
    }

    let calendarWidth = bounds.width - leftInset

    for overlappingViews in result {
      let totalCount = CGFloat(overlappingViews.count)
      let events = overlappingViews.map {$0.1}
      for (index, event) in events.enumerate() {
        let startY = dateToY(event.datePeriod.StartDate)
        let endY = dateToY(event.datePeriod.EndDate)



  var fullHeight: CGFloat {
    return verticalInset * 2 + verticalDiff * 24
  }

  var calendarWidth: CGFloat {
    return bounds.width - leftInset
  }

  var fontSize: CGFloat = 11
