function PPlaceTypeConfig2() {
	var placeTypes = {};
	var emptySet = [];
	var maxZoom = {};
	var minZoom = {};
	var none = "default";
	
	this.set = function( zoom, placetypes, aggrule ) {
		if( arguments.length < 2 ) {
			return false;
		}
		if( arguments.length <= 2 ) {
			aggrule = none;
		}
		if( !placeTypes[aggrule] ) {
			placeTypes[aggrule] = {};
		}
		placeTypes[aggrule][zoom] = placetypes;
		if( maxZoom[aggrule] || maxZoom[aggrule] === 0 ) {
			if( zoom > maxZoom[aggrule] ) {
				maxZoom[aggrule] = zoom;
			}
		} else {
			maxZoom[aggrule] = zoom;
		}
		if( minZoom[aggrule] || minZoom[aggrule] === 0 ) {
			if( zoom < minZoom[aggrule] ) {
				minZoom[aggrule] = zoom;
			}
		} else {
			minZoom[aggrule] = zoom;
		}
		return true;
	};
	
	this.get = function( zoom, aggrule ) {
		if( arguments.length < 1 ) {
			return emptySet;
		}
		if( arguments.length == 1 || !placeTypes[aggrule] ) {
			aggrule = none;
		}
		if( placeTypes[aggrule] && placeTypes[aggrule][zoom] ) {
			return placeTypes[aggrule][zoom];
		}
		return emptySet;
	};
	
	this.getBestFitIn = function( zoom, aggrule ) {
		if( arguments.length < 1 ) {
			return emptySet;
		}
		if( arguments.length == 1 || !placeTypes[aggrule] ) {
			aggrule = none;
		}
		if( placeTypes[aggrule] && ( maxZoom[aggrule] || maxZoom[aggrule] === 0 ) ) {
			if( zoom > maxZoom[aggrule] ) {
				zoom = maxZoom[aggrule];
			}
			var perfectFit = this.get( zoom, aggrule );
			if( perfectFit.length > 0 ) {
				return perfectFit;
			}
			for( var z = zoom; z <= maxZoom[aggrule]; ++z ) {
				if( placeTypes[aggrule][z] ) {
					return placeTypes[aggrule][z];
				}
			}
		}
		return emptySet;
	};
	
	this.getBestFitOut = function( zoom, aggrule ) {
		if( arguments.length < 1 ) {
			return emptySet;
		}
		if( arguments.length == 1 || !placeTypes[aggrule] ) {
			aggrule = none;
		}
		if( placeTypes[aggrule] && ( minZoom[aggrule] || minZoom[aggrule] === 0 ) ) {
			if( zoom < minZoom[aggrule] ) {
				zoom = minZoom[aggrule];
			}
			var perfectFit = this.get( zoom, aggrule );
			if( perfectFit.length > 0 ) {
				return perfectFit;
			}
			for( var z = zoom; z >= minZoom[aggrule]; --z ) {
				if( placeTypes[aggrule][z] ) {
					return placeTypes[aggrule][z];
				}
			}
		}
		return emptySet;
	};
	this.setAvail = function(placetypes, aggrule) {
		placeTypes[aggrule].avail = placetypes;
	};
	this.getAvail = function(aggrule) {
		return placeTypes[aggrule].avail;
	};
}

