 	}
 	
 	func selectedLocation(location: Location) {
-		// remove old locations
-		cleanAnnotations()
-		
-		self.location = location
-		
 		// dismiss search results
 		dismissViewControllerAnimated(true) {
+			
 			// change review to center result location
 			let region = MKCoordinateRegionMakeWithDistance(location.coordinate,
 				self.resultRegionDistance, self.resultRegionDistance)
 			self.mapView.setRegion(region, animated: true)
 			
-			// add annotation
-			self.mapView.addAnnotation(location)
+			// set location, this also adds annotation
+			self.location = location
 		}
 	}
 }

			let coordinates = mapView.convertPoint(point, toCoordinateFromView: mapView)
			let location = CLLocation(latitude: coordinates.latitude, longitude: coordinates.longitude)
			
			// remove current location
			cleanAnnotations()
			
			// add annotation to map
			let annotation = MKPointAnnotation()
			annotation.coordinate = coordinates
			mapView.addAnnotation(annotation)
			
			geocoder.cancelGeocode()
			geocoder.reverseGeocodeLocation(location) { response, error in
				let placemark = (response as? [CLPlacemark])?.first
				if let placemark = placemark {
					// get POI name from placemark if any
					let name = (placemark.areasOfInterest as? [String])?.first
					self.location = Location(name: name, placemark: placemark)
					
					// set annotatio title
					annotation.title = self.location!.title
				}
			}
		}

	
	public var location: Location? {
		didSet {
			searchBar.text = flatMap(location, { $0.title }) ?? ""
			updateAnnotation()
		}
	}
	
