 		}
 	}
 	
-	func showItemsForSearchResult(searchResult :MKLocalSearchResponse?) {
-		var locations: [Location] = []
+	func showItemsForSearchResult(searchResult: MKLocalSearchResponse?) {
+		let locations: [Location]
 		if let response = searchResult, let mapItems = response.mapItems as? [MKMapItem] {
-			locations = map(mapItems) { mapItem in
-				let place = mapItem.placemark
-				let address = ABCreateStringWithAddressDictionary(place.addressDictionary, true)
-				return Location(name: mapItem.name , address: address, coordinates: place.location)
-			}
-		}
+			locations = map(mapItems) { Location(name: $0.name, placemark: $0.placemark) }
+		} else { locations = [] }
 		self.results.locations = locations
 		self.results.tableView.reloadData()
 	}
 	
 	func selectedLocation(location: Location) {
-		// remove old location
-		if let location = self.location {
-			mapView.removeAnnotation(location)
-		}
+		// remove old locations
+		cleanAnnotations()
 		
 		self.location = location
 		

		didSet {
			if let location = location {
				searchBar.text = location.name
			}
		}
	}
	
	static let SearchTermKey = "SearchTermKey"
	
	var localSearch: MKLocalSearch?
	var searchTimer: NSTimer?
	

	deinit {
		searchTimer?.invalidate()
		localSearch?.cancel()
		geocoder.cancelGeocode()
	}
	
	override public func loadView() {
