* @param client
	 */
	private void cmd_quests(final String arg, final Client client) {
		final Player player = getPlayer(client);

		if (!arg.equals("")) {
			String[] args = arg.split(" ");

			if (arg.charAt(0) == '#') {
				String param = args[0];

				if (arg.indexOf(" ") != -1) param = arg.substring(1, arg.indexOf(" "));
				else                        param = arg.substring(1);
				
				if (args.length == 2) {
					Quest quest = null;
					
					int qNum = Utils.toInt(args[1], -1);

					if (qNum != -1) {
						quest = player.getQuests().get(qNum);
					}

					/*
					 * if( quest == null ) { send("No such quest!", client);
					 * return; }
					 */

					if (quest != null) {
						if (param.equals("abandon") || param.equals("a")) {
							// #abandon or #a
							send("You abandon " + quest.getName() + ".", client);
							player.removeQuest(quest);
						}
						else if (param.equals("ignore") || param.equals("i")) {
							// #ignore or #i
							send("You ignore " + colors(quest.getName(), getDisplayColor("quest")) + ".", client);
							quest.setIgnore(true);
						}
						else if (param.equals("info")) {
							// #info
							send(Utils.padRight("", '-', 80), client);
							// send("----------------------------------------------------", client);
							send("Quest ID#: " + quest.getId(), client);
							send("Name: " + quest.getName(), client);
							send("Location: " + quest.getLocation(), client);
							send("Description: ", client);
							showDesc(quest.getDescription(), 80, client);
							// send("----------------------------------------------------", client);
							send(Utils.padRight("", '-', 80), client);

							int i = 0;

							for (final Task t : quest.getTasks()) {
								send(" " + i + ") " + t.getDescription() + "[ " + t.getProgress() + " ]", client);
								i++;
							}

							send(Utils.padRight("", '-', 80), client);
						}
						else if (param.equals("remember") || param.equals("r")) {
							// #remember or #r
							send("You remember " + colors(quest.getName(), getDisplayColor("quest")) + ".", client);
							quest.setIgnore(false);
						}
					}
				}
				else if (args.length == 3) {
					Player player1 = getPlayer(args[1]);
					
					int qNum = Utils.toInt(args[2], -1);

					if (param.equals("share") || param.equals("s")) {
						if (qNum != -1) {
							final Quest quest = player.getQuests().get(qNum);
							
							// no way here for the player to deny a share...
							player1.addQuest( quest.getCopy() );
							
							final String msg = player.getName() + " shared " + quest.getName() + " with you.";
							
							addMessage( new Message(player, player1, msg) );
						}
					}
				}
				else {
					if (param.equals("ignored")) {
						int index = 0;

						client.write("" + Colors.WHITE);

						send("Quests (Ignored)", client);
						send("================================================================================", client);

						for (final Quest quest1 : player.getQuests()) {
							if (quest1.isIgnored()) {
								client.write(index + ") ");
								client.write(Colors.YELLOW + "   o " + quest1.getName());
								client.writeln(Colors.MAGENTA + " ( " + quest1.getLocation().getName() + " ) " + Colors.CYAN);
								client.write('\n');
								
								client.write("" + Colors.YELLOW);
								showDesc(quest1.getDescription(), client);
								client.write("" + Colors.CYAN);

								for (final Task task : quest1.getTasks()) {
									if (task.isComplete()) {
										// should be greyed out if task is
										// complete
										client.write(Colors.GREEN + "      o " + task.getDescription());

										if (task.getType().equals(TaskType.KILL)) {
											final KillTask kt = (KillTask) task;

											client.write(" [ " + kt.kills + " / " + kt.toKill + " ]");
										}
									}
									else {
										client.write(Colors.CYAN + "      o " + task.getDescription());

										if (task.getType().equals(TaskType.KILL)) {
											final KillTask kt = (KillTask) task;

											client.write(" [ " + kt.kills + " / " + kt.toKill + " ]");
										}
									}

									client.write(Colors.MAGENTA + " ( " + task.getLocation().getName() + " ) " + Colors.CYAN);
									client.write('\n');
								}
							}
							else {
							}

							index++;
						}

						client.write("" + Colors.WHITE);

						send("================================================================================", client);
					}
					else if ((param.equals("list") || param.equals("l")) && checkAccess(player, Constants.BUILD)) {
						int index = 0;

						for (Quest q : quests) {
							System.out.println(index);
							send(q.getId() + ": " + q.getName() + " ( " + q.getLocation().getName() + " )", client);
							index++;
						}
					}
				}
			}
		}
		else {
			int index = 0;

			send("Quests", client);
			send("================================================================================", client);

			for (final Quest quest : player.getQuests()) {
				if (!quest.isIgnored()) {
					if (quest.isComplete()) {
						client.write(index + ")    o " + quest.getName() + " ( " + quest.getLocation().getName() + " ) [" + quest.getId() + "]\n");
						continue;
					}

					client.write(index + ") ");
					client.write(Colors.YELLOW + "   o " + quest.getName());
					client.write(Colors.MAGENTA + " ( " + quest.getLocation().getName() + " ) " + Colors.CYAN);
					client.writeln("[" + quest.getId() + "]");
					client.write('\n');
					client.write("" + Colors.YELLOW);

					showDesc(quest.getDescription(), client);

					client.write("" + Colors.CYAN);

					for (Task task : quest.getTasks()) {
						if (task.isComplete()) {
							// should be greyed out if task is complete
							client.write(Colors.GREEN + "      o " + task.getDescription());

							if (task.getType().equals(TaskType.KILL)) {
								final KillTask kt = (KillTask) task;

								client.write(" [ " + kt.kills + " / "  + kt.toKill + " ]");
							}
						}
						else {
							client.write(Colors.CYAN + "      o " + task.getDescription());

							if (task.getType().equals(TaskType.KILL)) {
								final KillTask kt = (KillTask) task;
								client.write(" [ " + kt.kills + " / " + kt.toKill + " ]");
							}
						}

						client.write(Colors.MAGENTA + " ( " + task.getLocation().getName() + " ) " + Colors.CYAN);
						client.write('\n');
					}
				}
				else {
				}

				index++;
			}

			client.write("" + Colors.WHITE);

			send("================================================================================", client);
			send("* ignored quests are not show here", client);
		}
	}