* coding errors
	 * 
	 * @param arg
	 * @param client
	 */
	private void cmd_zones(final String arg, final Client client) {
		final String[] params = arg.split(" ");

		debug("# Params: " + params.length);

		/*
		 * if (!arg.equals("") && params.length == 1) { if
		 * (params[0].equals("+new")) { Zone zone = new Zone(params[0], null);
		 * zones.put(zone, 10); // store a new zone object
		 * send("New Zone Established!", client); // tell us that it succeeded.
		 * } }
		 */
		if (params.length >= 2) {
			String[] args = params[1].split("=");
			
			System.out.println(params[0]);
			
			if (params[0].equals("+new")) {
				System.out.println("params: " + params[0] + " " + params[1]);
				
				Zone zone = new Zone(params[1], null);
				
				zones.put(zone, 10); // store a new zone object
				
				send("New Zone Established!", client); // tell us that it succeeded.
			}
			else if (params[0].equals("+add")) {
				if (args != null) {
					if (args.length > 1) {
						int dbref = Utils.toInt(args[0], -1);

						if (dbref == -1) {
							send(gameError("@zones", ErrorCodes.NOT_A_NUMBER), client);
						}

						final Room room = getRoom(dbref);
						final Zone zone = getZone(args[1]);

						if (room != null) {
							if (zone != null) {
								MudUtils.addRoomToZone(zone, room);

								send(room.getName() + " added to " + zone.getName(), client);
							}
							else send("No such zone!", client);
						}
						else send("Invalid Room!", client);
					}
				}
			}
			else if (params[0].equals("+info")) {
				// TODO this parameter is redundant with the zoneinfo command

				// need to fix this so that the portion of this kind of argument
				// '+info Red Dragon Inn' gets
				// zoined back into a single string
				String s = Utils.join(Arrays.copyOfRange(params, 1, params.length), " ");

				final Zone zone = getZone(s);

				if (zone != null) {
					final Integer zoneID = zone.getId();
					final String zoneName = zone.getName();

					final Integer zoneSize = zone.getRooms().size();

					// send("Zone - " + zone.getName() + "(" + zone.getId() + ")", client);

					// send("" + zone.getName() + " ( " + zone.getRooms().size() + " Rooms )", client);
					send("" + colors(zoneName + " [" + zoneID + "] ", "purple") + " ( " + zoneSize + " Rooms )", client);

					for (final Room room : zone.getRooms()) {
						send("- " + room.getName() + " (#" + room.getDBRef() + ")", client);
					}

					send("Quests:", client);

					for (final Quest quest : getQuestsByZone(zone)) {
						send(quest.getId() + ": " + quest.getName(), client);
					}

					final StringBuilder subzones = new StringBuilder();

					int zc = 0;

					for (final Zone zone1 : zones.keySet()) {
						if (zone1.getParent() == zone) {
							subzones.append(zone1.getName());

							if (zc < zones.size()) {
								subzones.append(", ");
							}
						}

						zc++;
					}

					send("Subzones: " + subzones.toString());
				}
			}
		}
		else {
			send("Zones:", client);
			//debug(zones.entrySet());

			for (Zone zone : zones.keySet()) {
				final Integer zoneID = zone.getId();
				final String zoneName = zone.getName();

				send("" + colors(zoneName + " [" + zoneID + "] ", "purple") + " ( " + zone.getRooms().size() + " Rooms )", client);

				for (final Room room : zone.getRooms()) {
					send("- " + room.getName() + " (#" + room.getDBRef() + ")", client);
				}
			}
		}
	}