 	
 	func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
 		
-		guard let row = Row(rawValue: indexPath.row) else {
+		let rowIdentifier = identifierForRow(indexPath.row)
+		
+		if rowIdentifier == DestinationMapCell.nibIdentifier() {
+			return DestinationMapCell.preferredHeight()
+		}
+		
+		guard let _ = rowIdentifier, let viewModel = viewModel else {
 			return CGFloat.min
 		}
 		
-		switch row {
-		case .Map: return DestinationMapCell.preferredHeight()
-		}
+		let infoTypes = Array(viewModel.locationInfo.keys)
+		let infoRow = indexPath.row - 1
+		
+		let infoType = infoTypes[infoRow]
+		let infoText = viewModel.locationInfo[infoType]
+		
+		return DestinationInfoCell.preferredHeight(infoType: infoType, infoText: infoText)
 	}
 	
 	

extension DestinationInfoSectionDelegate: UITableViewDataSource {

	func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
		return Row.allValues.count
	}
	
	func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
		
		guard let row = Row(rawValue: indexPath.row) else {
			return UITableViewCell()
		}
		
		return tableView.dequeueReusableCellWithIdentifier(row.cellIdentifier, forIndexPath: indexPath)
	}
}


	}
	
	func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
		
		if let mapCell = cell as? DestinationMapCell,
			let locationCoordinate = viewModel?.locationCoordinate {
			
			mapCell.configure(coordinate: locationCoordinate)
			return
		}
		
		
		guard let infoCell = cell as? DestinationInfoCell,
			let locationInfo = viewModel?.locationInfo
			where indexPath.row <= locationInfo.count else {
				return
		}
		
		let infoRow = indexPath.row - 1
		let infoTypes = Array(locationInfo.keys)
		
		let infoType = infoTypes[infoRow]
		let infoText = locationInfo[infoType]
		
		infoCell.configure(infoType: infoType, infoText: infoText)
	}
}