protected String addXMLQuestItem(MOB mob,
									 int showFlag,
									 DVector pageDV,
									 String showValue,
									 String parm1Fixed,
									 String lastLabel,
									 boolean optionalEntry,
									 int step,
									 int showNumber)
	throws IOException
	{
		Item I=null;
		final List<Item> choices=new Vector<Item>();
		Item baseI=((showValue!=null)?baseI=CMLib.coffeeMaker().getItemFromXML(showValue):null);
		final StringBuffer choiceDescs=new StringBuffer("");
		if(baseI!=null)
		{
			choices.add(baseI);
			choiceDescs.append(baseI.name()+", ");
		}
		final Room R=mob.location();
		if(R!=null)
		for(int i=0;i<R.numItems();i++)
		{
			I=R.getItem(i);
			if((I!=null)&&(I.container()==null)&&(I.isSavable()))
			{
				choices.add(I);
				choiceDescs.append(I.name()+", ");
			}
		}
		final List<String> allItemNames=new Vector<String>();
		CMClass.addAllItemClassNames(allItemNames,true,false,false,CMProps.getIntVar(CMProps.Int.MUDTHEME));
		final List<Item> newItems=new Vector<Item>();
		for(int a=0;a<allItemNames.size();a++)
		{
			I=CMClass.getItem(allItemNames.get(a));
			if((I!=null)&&(I.isGeneric()))
			{
				newItems.add(I);
				I.setName(L("A NEW @x1",I.ID().toUpperCase()));
				choices.add(I);
				choiceDescs.append(I.name()+", ");
			}
		}
		choiceDescs.append("CANCEL");
		final Item canItem=CMClass.getItem("StdItem");
		canItem.setName(L("CANCEL"));
		choices.add(canItem);
		String showName=showValue;
		if(baseI!=null)
			showName=CMLib.english().getContextName(choices,baseI);
		lastLabel=((lastLabel==null)?"":lastLabel)+"\n\rChoices: "+choiceDescs.toString();
		final GenericEditor.CMEval evaler = getQuestCommandEval(QMCommand.$ITEMXML);
		final String s=CMLib.genEd().prompt(mob,showName,showNumber,showFlag,parm1Fixed,optionalEntry,false,lastLabel,
										evaler, choices.toArray());
		canItem.destroy();
		if(s.equalsIgnoreCase("CANCEL"))
			return null;
		I=(Item)CMLib.english().fetchEnvironmental(choices,s,false);
		if((I!=null)&&(newItems.contains(I)))
		{
			final Command C=CMClass.getCommand("Modify");
			if(C!=null)
				C.executeInternal(mob,0,I);
			// modify it!
		}
		final String newValue=(I!=null)?CMLib.coffeeMaker().getItemXML(I).toString():showValue;
		for(int n=0;n<newItems.size();n++) newItems.get(n).destroy();
		return (newValue==null)?"":newValue.trim();
	}