public EntityTreeNode<EC> update( EntityRange er, EntityUpdater<EC> u, Collection<EC> newEntities ) {
			if( !EntityRanges.intersects(er, this) ) return this;
			
			// TODO: If no entities are changed, return self
			// rather than pushing unchanged entities into the newEntities list
			for( EC e : localEntities ) {
				EC updated = EntityRanges.intersects(er, e) ? u.update(e, newEntities) : e;
				if( updated != null ) newEntities.add( updated );
			}
			
			if( !hasSubNodes() ) return null;
			
			EntityTreeNode<EC> newNodeA = subNodeA.update(er, u, newEntities);
			EntityTreeNode<EC> newNodeB = subNodeB.update(er, u, newEntities);
			
			if( newNodeA == null && newNodeB == null ) return null;
			
			if( newNodeA == null ) newNodeA = new EntityTreeNode<EC>((AABB)subNodeA); 
			if( newNodeB == null ) newNodeB = new EntityTreeNode<EC>((AABB)subNodeB);
			
			return new EntityTreeNode<EC>(
				minX, minY, minZ,
				maxX, maxY, maxZ,
				newNodeA, newNodeB
			);
		}