         self.mapView.setCenterCoordinate(self.mapView.userLocation.coordinate, animated: true)
         self.currentButton.enabled = false
     }
+}
 
-    // MARK: - MKMapView delegate
+// MARK: - MKMapView delegate
 
+extension LocationPickerController: MKMapViewDelegate {
+    
     func mapView(mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
         guard self.isInitialized else {
             return
         }
         self.currentButton.enabled = true
     }
-
+    
     func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
         guard self.isInitialized else {
             return
         }
         self.pointAnnotation.coordinate = mapView.region.center
     }
+}
 
-    // MARK: - CLLocationManager delegate
+
+// MARK: - CLLocationManager delegate
+
+extension LocationPickerController: CLLocationManagerDelegate {
 
     func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
         switch status {

    func didTapDoneButton() {
        guard CLLocationCoordinate2DIsValid(self.mapView.centerCoordinate) else {
            self.failure?(NSError(domain: "LocationPickerControllerErrorDomain",
                                  code: 0,
                                  userInfo: ["Reason": "Invalid coordinate"]))
            return
        }


typealias successClosure = (CLLocationCoordinate2D) -> Void
typealias failureClosure = (NSError) -> Void

class LocationPickerController: UIViewController {

    var mapView: MKMapView!
    var pointAnnotation: MKPointAnnotation!
