         return newDates
     }
     
+    // MARK: Initializers
+    
+    required init?(coder aDecoder: NSCoder)
+    {
+        return nil
+    }
+    
+    init(viewController: GCCalendarViewController, startDate: NSDate)
+    {
+        self.viewController = viewController
+        
+        super.init(frame: CGRectZero)
+        
+        self.startDate = startDate
+        
+        self.axis = .Vertical
+        self.distribution = .FillEqually
+        
+        self.translatesAutoresizingMaskIntoConstraints = false
+        
+        self.addWeekViews()
+    }
+}
+
+// MARK: - Pan Gesture Recognizer
+
+internal extension GCCalendarMonthView
+{
+    // MARK: Creation
+    
+    internal func addPanGestureRecognizer(target: AnyObject, action: Selector)
+    {
+        self.panGestureRecognizer = UIPanGestureRecognizer(target: target, action: action)
+        
+        self.addGestureRecognizer(self.panGestureRecognizer)
+    }
+}
+
+// MARK: - Week Views
+
+internal extension GCCalendarMonthView
+{
+    // MARK: Creation
+    
+    private func addWeekViews()
+    {
+        for dates in self.dates
+        {
+            let weekView = GCCalendarWeekView(viewController: self.viewController, dates: dates)
+            
+            self.addArrangedSubview(weekView)
+            self.weekViews.append(weekView)
+        }
+    }
+}
+
+// MARK: - Start Date & Selected Date
+
+extension GCCalendarMonthView
+{
+    // MARK: Start Date
+    
     internal func update(newStartDate newStartDate: NSDate)
     {
         self.startDate = newStartDate

        
        weekView.setSelectedDate(weekday: selectedDateComponents.weekday)
    }
    
    internal var containsToday: Bool {
        
        return self.viewController.calendar.isDate(self.startDate, equalToDate: NSDate(), toUnitGranularity: .Month)
    }
}

            self.weekViews[index].update(newDates: dates)
        }
    }
    
    // MARK: Selected Date
    
    internal func setSelectedDate()
    {
