function onDrop(x, y, draginfo)

	local msg = {};
	local clientmsg = {};
	msg.font = "chatfont";
	clientmsg.font = "chatfont";
	clientmsg.icon = "thebox_icon";
	msg.sender = "thebox_box_roll";
	clientmsg.sender = "Box Roll";

	if ModifierStack.isEmpty() then
		--[[ do nothing ]]
	elseif draginfo.getNumberData() == 0 and draginfo.getDescription() == "" then
		draginfo.setDescription(ModifierStack.getDescription());
		draginfo.setNumberData(ModifierStack.getSum());
	else
		local originalnumber = draginfo.getNumberData();
		local numstr = tostring(originalnumber);
		if originalnumber > 0 then
			numstr = "+" .. originalnumber;
		end

		local moddesc = ModifierStack.getDescription(true);
		local desc = draginfo.getDescription();
		
		if numstr ~= "0" then
			desc = desc .. " " .. numstr;
		end
		if moddesc ~= "" then
			desc = desc .. " (" .. moddesc .. ")";
		end
		
		draginfo.setDescription(desc);
		draginfo.setNumberData(draginfo.getNumberData() + ModifierStack.getSum());
	end
	ModifierStack.reset();	

	local dice = draginfo.getDieList();

	msg.text = "";
	if draginfo.getDescription ~= "" then
		clientmsg.text = draginfo.getDescription() .. ": ";
	end
	
	for j, u in pairs(dice) do
		for k, v in pairs(dice[j]) do
			if v == "d100" then
				msg.text = string.sub(msg.text,1,string.len(msg.text)-4);
			end
			msg.text = msg.text .. v .. "+";
		end	
	end
	clientmsg.text = clientmsg.text .. msg.text .. draginfo.getNumberData();
	
	msg.text = msg.text .. draginfo.getNumberData() .. " ";
	if User.getIdentityLabel() ~= nil then
		msg.text = msg.text .. User.getIdentityLabel() .. ": ";
	end
	msg.text = msg.text .. draginfo.getDescription();

	ChatManager.addMessage(clientmsg);
	ChatManager.deliverMessage(msg, "");
	draginfo.reset();
	return nil;
end