private void listenForMapSpecificRequests() {
		JsonObject config = container.config();
		byte startChannel = ((Number) config.getNumber("startChannel")).byteValue();
		byte endChannel = ((Number) config.getNumber("endChannel")).byteValue();
		byte world = ((Number) config.getNumber("world")).byteValue();
		for (byte i = startChannel; i < endChannel; i++) {
			byte channel = i;
			Short fqChKey = EventAddresses.fullyQualifiedChannelKey(world, channel);
			String address = String.format(EventAddresses.MAP_REQUEST, fqChKey);
			Handler<Message<Buffer>> requestHandler = msg -> {
				Map<String, Object> rxBson = BSON.decode(msg.body());
				String op = (String) rxBson.get("op");
				Integer mapId = (Integer) rxBson.get("id");

				ChannelMap map = getMap(fqChKey, mapId);
				switch (op) {
					case "ensureLoaded": {
						if (map != null) {
							msg.reply();
						} else {
							MapSpecsFactory.getInstance().retrieveSpecs(mapId.intValue(), specs -> {
								if (specs != null) {
									loadedMaps.get(fqChKey).put(mapId, new ChannelMap(vertx, world, channel, mapId.intValue(), specs));
									msg.reply();
								} else {
									msg.fail(1, "Failed to load map specifications");
								}
							}, vertx.eventBus());
						}
						break;
					}
					case "spawn": {
						if (map == null) {
							msg.fail(1, "Map is not loaded");
							return;
						}
						int mobId = ((Integer) rxBson.get("mob")).intValue();
						map.spawn(mobId);
						msg.reply();
						break;
					}
				}
			};
			vertx.eventBus().registerHandler(address, requestHandler);
			handlers.put(address, requestHandler);
		}
	}