* @param client
	 */
	private void cmd_find(final String arg, final Client client) {
		// syntax: @find [<type>] <search string>
		final LinkedList<String> matches = new LinkedList<String>();

		String searchString = null;

		String args[] = arg.split(" ");

		if (args.length > 1) {
			if (args[0].charAt(0) == '-') {
				String param = args[0].substring(1);

				searchString = args[1];

				/*
				 * if( param.equals("p") ) { System.out.println("Find Players");
				 * send("Find Players - using \'" + searchString + "\'");
				 * 
				 * // needs to work even with offline players if( searchString
				 * == null ) { matches.addAll(objectDB.players.keySet()); } else
				 * { for(final MUDObject m : objectDB.players.values()) { if(
				 * m.getName().contains(searchString) ) {
				 * matches.add(m.getName() + " (#" + m.getDBRef() + ")"); } } }
				 * }
				 */
				if ( param.equals("i") ) {
					
				}
				else if (param.equals("n")) {
					System.out.println("Find NPCs");
					send("Find NPCs - using \'" + searchString + "\'");

					if (searchString == null) {
						for (final NPC npc : objectDB.getNPCs()) {
							matches.add(npc.getName() + " (#" + npc.getDBRef() + ")");
						}
					}
					else {
						for (final NPC npc : objectDB.getNPCs()) {
							if (npc.getName().toLowerCase().startsWith(searchString)) {
								matches.add(npc.getName() + " (#" + npc.getDBRef() + ")");
							}
						}
					}
				}
				else if ( param.equals("p") ) {
					if (searchString == null) {
						for (final Player pc : objectDB.getPlayers()) {
							matches.add(pc.getName() + " (#" + pc.getDBRef() + ")");
						}
					}
					else {
						for (final Player pc : objectDB.getPlayers()) {
							if (pc.getName().toLowerCase().startsWith(searchString)) {
								matches.add(pc.getName() + " (#" + pc.getDBRef() + ")");
							}
						}
					}
					
				}
				else if ( param.equals("px") ) {
					// player, exclusive
					System.out.println("Find Player");
					
					Player player = objectDB.getPlayer(searchString);
					
					matches.add(player.getName() + " (#" + player.getDBRef() + ")");
				}
				else if (param.equals("r")) {
					System.out.println("Find Rooms");
					send("Find Rooms - using \'" + searchString + "\'");

					// TODO make this work, I may need to add general
					// functionality to objectDB to get all the rooms
					/*
					 * if( searchString == null ) { for(final NPC npc :
					 * objectDB.getNPCs()) { matches.add(npc.getName() + " (#" +
					 * npc.getDBRef() + ")"); } } else { for(final NPC npc :
					 * objectDB.getNPCs()) { if(
					 * npc.getName().toLowerCase().contains(searchString) ) {
					 * matches.add(npc.getName() + " (#" + npc.getDBRef() +
					 * ")"); } } }
					 */
				}
				else {
					// TODO use gameError stuff here?
					send("Invalid Parameter.", client);
				}
			}
		}
		else {
			searchString = arg;

			if (searchString.equals("") || searchString == null) {
				System.out.println("Find Any");

				// TODO implement this, it should just return everything
				for (final MUDObject m : objectDB.getObjects()) {
					matches.add(m.getName() + " (#" + m.getDBRef() + ")");
				}
			}
			else {
				System.out.println("Find Any");
				send("Find Any - using \'" + searchString + "\'", client);

				for (final MUDObject m : objectDB.findByLower(arg)) {
					matches.add(m.getName() + " (#" + m.getDBRef() + ")");
				}
			}
		}

		for (final String s : matches) {
			send(s, client);
		}

		send("**********", client);
		send(matches.size() + " objects found.", client);
	}