function SetItemButtonCount(button, count)
 	if ( not button ) then
 		return;
 	end
 
 	if ( not count ) then
 		count = 0;
 	end
 
 	button.count = count;
+	local countString = button.Count or _G[button:GetName().."Count"];
 	if ( count > 1 or (button.isBag and count > 0) ) then
 		if ( count > (button.maxDisplayCount or 9999) ) then
 			count = "*";
 		end
-		_G[button:GetName().."Count"]:SetText(count);
-		_G[button:GetName().."Count"]:Show();
+		countString:SetText(count);
+		countString:Show();
 	else
-		_G[button:GetName().."Count"]:Hide();
+		countString:Hide();
 	end
 end
 
 function SetItemButtonStock(button, numInStock)
 	if ( not button ) then
 		return;
 	end
 
 	if ( not numInStock ) then
 		numInStock = "";
 	end
 
 	button.numInStock = numInStock;
 	if ( numInStock > 0 ) then
 		_G[button:GetName().."Stock"]:SetFormattedText(MERCHANT_STOCK, numInStock);
 		_G[button:GetName().."Stock"]:Show();
 	else
 		_G[button:GetName().."Stock"]:Hide();
 	end
 end
 
 function SetItemButtonTexture(button, texture)
 	if ( not button ) then
 		return;
 	end
+	local icon = button.icon or _G[button:GetName().."IconTexture"];
 	if ( texture ) then
-		_G[button:GetName().."IconTexture"]:Show();
+		icon:Show();
 	else
-		_G[button:GetName().."IconTexture"]:Hide();
+		icon:Hide();
 	end
-	_G[button:GetName().."IconTexture"]:SetTexture(texture);
+	icon:SetTexture(texture);
 end
 
 function SetItemButtonTextureVertexColor(button, r, g, b)
 	if ( not button ) then
 		return;
 	end
 	
-	_G[button:GetName().."IconTexture"]:SetVertexColor(r, g, b);
+	local icon = button.icon or _G[button:GetName().."IconTexture"];
+	icon:SetVertexColor(r, g, b);
 end
 
 function SetItemButtonDesaturated(button, desaturated)
 	if ( not button ) then
 		return;
 	end
-	local icon = _G[button:GetName().."IconTexture"];
+	local icon = button.icon or _G[button:GetName().."IconTexture"];
 	if ( not icon ) then
 		return;
 	end
 	
 	icon:SetDesaturated(desaturated);
 end
 
 function SetItemButtonNormalTextureVertexColor(button, r, g, b)
 	if ( not button ) then
 		return;
 	end
 	
 	_G[button:GetName().."NormalTexture"]:SetVertexColor(r, g, b);
 end
 
 function SetItemButtonNameFrameVertexColor(button, r, g, b)
 	if ( not button ) then
 		return;
 	end
 	
-	_G[button:GetName().."NameFrame"]:SetVertexColor(r, g, b);
+	local nameFrame = button.NameFrame or _G[button:GetName().."NameFrame"];
+	nameFrame:SetVertexColor(r, g, b);
 end
 
 function SetItemButtonSlotVertexColor(button, r, g, b)
 	if ( not button ) then
 		return;
 	end
 	
 	_G[button:GetName().."SlotTexture"]:SetVertexColor(r, g, b);
 end
 
 function HandleModifiedItemClick(link)
 	if ( not link ) then
 		return false;
 	end
 	if ( IsModifiedClick("CHATLINK") ) then
 		local linkType = string.match(link, "|H([^:]+)");
 		if ( linkType == "instancelock" ) then	--People can't re-link instances that aren't their own.
 			local guid = string.match(link, "|Hinstancelock:([^:]+)");
 			if ( not string.find(UnitGUID("player"), guid) ) then
 				return true;
 			end
 		end
 		if ( ChatEdit_InsertLink(link) ) then
 			return true;
 		end
 	end
 	if ( IsModifiedClick("DRESSUP") ) then
 		return DressUpItemLink(link);
 	end
 	return false;
 end