private void cmd_itemedit(final String arg, final Client client) {
		final Player player = getPlayer(client);
		final String old_status = player.getStatus();

		player.setStatus(Constants.ST_EDIT);
		player.setEditor(Editors.ITEM);

		EditorData newEDD = new EditorData();

		// create new item if no item to edit specified
		if (arg.equals("")) {
			Item item = createItem();

			if (item.Edit_Ok) {
				item.Edit_Ok = false; // further edit access not permitted (only one person may access at a time)
			}
			else {
				// item is not editable, exit the editor reset player, and clear edit flag and editor setting
				player.setStatus(old_status);
				player.setEditor(Editors.NONE);

				// clear editor data
				player.setEditorData(null);

				send("Game> Item Editor - Error: item not editable (!Edit_Ok)", client);

				return;
			}

			// record prior player status
			newEDD.addObject("pstatus", old_status);

			// add item and it's constituent parts to the editor data
			newEDD.addObject("item", item);
			newEDD.addObject("desc", item.getDesc());
			newEDD.addObject("name", item.getName());
			newEDD.addObject("type", item.getItemType());

			player.setEditorData(newEDD);
		}
		else {
			Item item = null;
			boolean exist = false;

			try {
				int dbref = Integer.parseInt(arg);
				item = getItem(dbref);

				if (item.Edit_Ok) {
					item.Edit_Ok = false; // further edit access not permitted (only one person may access at a time
				}
				else {
					// item is not editable, exit the editor reset player, and clear edit flag and editor setting
					player.setStatus(old_status);
					player.setEditor(Editors.NONE);

					// clear editor data
					player.setEditorData(null);

					send("Game> Item Editor - Error: item not editable (!Edit_Ok)", client);

					return;
				}

				exist = true;
			}
			catch (final NumberFormatException nfe) {
				// no item with that dbref, cannot edit (abort)

				System.out.println("--- Stack Trace ---");
				nfe.printStackTrace();

				// reset player, and clear edit flag and editor setting
				player.setStatus(old_status);
				player.setEditor(Editors.NONE);

				// clear editor data
				player.setEditorData(null);

				send("Game> Item Editor - Unexpected error caused abort (number format exception)", client);
			}
			catch (final NullPointerException npe) {
				// null item, cannot edit (abort)

				System.out.println("--- Stack Trace ---");
				npe.printStackTrace();

				// reset player, and clear edit flag and editor setting
				player.setStatus(old_status);
				player.setEditor(Editors.NONE);

				// clear editor data
				player.setEditorData(null);

				send("Game> Item Editor - Unexpected error caused abort (null pointer exception)", client);
			}

			if (exist) {
				// item exists

				// record prior player status
				newEDD.addObject("pstatus", old_status);

				// add item and it's constituent parts to the editor data
				newEDD.addObject("item", item);
				newEDD.addObject("desc", item.getDesc());
				newEDD.addObject("name", item.getName());
				newEDD.addObject("type", item.getItemType());
			}
			else {
				// item doesn't exist (abort) reset player, and clear edit flag and editor setting

				player.setStatus(old_status);
				player.setEditor(Editors.NONE);

				// clear editor data
				player.setEditorData(null);

				send("Game> Item Editor - Error: item does not exist", client);

				return;
			}

			player.setEditorData(newEDD);
		}

		op_itemedit("show", client); // print out the info page
	}