 		let primitive = IndexedRenderPrimitive(vertices: vertices,
 																						indices: indices, scalarAttribs: scalars,
 																						color: rank.hashColor.tuple(),
-																						ownerHash: container.hashValue,
+																						ownerHash: container.hashValue,	// The hash of the owning region
 																						debugName: "\(container.name) - poi plane @ \(rank)")
-		return PoiPlane(primitive: primitive, rank: rank, toggleTime: Date())
+		return PoiPlane(primitive: primitive, rank: rank)
 	}
 }
-	
+
+// $ Put this extension on GeoPlaceContainer instead
 extension GeoRegion {
 	func poiRenderPlanes() -> [PoiPlane] {
 		return sortPlacesIntoPoiPlanes(places, in: self);

import OpenGLES
import GLKit

struct PoiPlane {
	let primitive: IndexedRenderPrimitive
	let rank: Int
	var toggleTime: Date
	var progress : Double {
		return min(max(0.0, Date().timeIntervalSince(toggleTime), 0.0), 1.0)
	}
}

class PoiRenderer {
	var regionPrimitives : [Int : [PoiPlane]]
	let poiProgram: GLuint
	let poiUniforms : (modelViewMatrix: GLint, color: GLint, rankThreshold: GLint, progress: GLint)
	var rankThreshold: Float = 1.0

								GLfloat(components[3]))
		glUniform1f(poiUniforms.rankThreshold, rankThreshold)
		
		for poiPlane in regionPrimitives {
			glUniform1f(poiUniforms.progress, 1.0)	// $ Lookup progress in fade list
			render(primitive: poiPlane.primitive)
		}
		
		glDisable(GLenum(GL_BLEND))
		glPopGroupMarkerEXT()
	}
