 			guard let marker = poiPrimitives.values.first(where: { $0.ownerHash == label.tag }) else {
 				continue
 			}
+			
+			// Layout labels (region labels hang under the center, POI labels hang from their top-left)
 			let screenPos = project(marker.worldPos)
-			label.frame.origin = screenPos
+			switch marker.kind {
+			case .Region: label.center = screenPos
+			default: label.frame.origin = screenPos
+			}
 		}
 	}
 	

		label.tag = marker.ownerHash
		label.isHidden = false
		
		let strokeAttribs: [NSAttributedString.Key: Any] =
			[.strokeColor: UIColor.black,
			 .foregroundColor: UIColor.white,
			 .strokeWidth: -3.0]
		label.attributedText = NSAttributedString(string: marker.name, attributes: strokeAttribs)
	}
	

			let newLabel = UILabel()
			newLabel.tag = 0
			newLabel.isHidden = true
			newLabel.frame = CGRect(x: 0.0, y: 0.0, width: 200.0, height: 30.0)
			newLabel.preferredMaxLayoutWidth = 200.0
			newLabel.lineBreakMode = .byWordWrapping
			newLabel.numberOfLines = 2
			newLabel.adjustsFontSizeToFitWidth = true
			
			poiLabels.append(newLabel)
			addSubview(newLabel)
