Thanks all for your replies. The info regarding "global" variables will definitely be useful as I get more into the scripting. For now, the method of searching for the name seems to work well. Good idea putting something unique and 'hidden' in, e.g. the GM field is a good idea, but for the spiritual weapon I think searching for the name is fine. I'm also happy searching across all pages, as I have no problem deleting all of the character's summoned weapons! I've put the macro calls into attributes on the cleric's character sheet, so they pop up when he selects his token (which means it will always be the 'correct' character selected. The check to see if a token is selected is just in case the script is called directly in chat). Only "issue" I have now is that it would be nice if the unsummon could be called with the weapon token selected OR the cleric's token. But as the weapons doesn't have a char sheet, I can't see a way of doing that with macro buttons for now. For anyone else interested, here are my scripts for summon and unsummon. Credit to Nick Olivo for the summon script (see my original post) - I made only minor tweaks to it. Summon: on("ready",function() { on("chat:message",function(msg){ if(msg.type=="api" && msg.content.indexOf("!spiritualWeapon")==0) { var selected = msg.selected; if (selected===undefined) { sendChat("API","Please select a character."); return; } var tok = getObj("graphic",selected[0]._id); var character = getObj("character",tok.get("represents")); var playerlist = character.get("controlledby") var weapon = createObj("graphic",{ left:tok.get("left")+tok.get("width"), top:tok.get("top"), height:tok.get("height")/2, width:tok.get("width")/2, pageid:tok.get("pageid"), layer:"objects", imgsrc:"<a href="https://s3.amazonaws.com/files.d20.io/images/178799339/pYoFMeFHsDozHrG6wc8b3Q/thumb.png?16056264685" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/178799339/pYoFMeFHsDozHrG6wc8b3Q/thumb.png?16056264685</a>", name: tok.get("name") + "'s Spiritual Weapon", controlledby:playerlist, aura1_radius:3, aura1_color:"#ffff99", showplayers_aura1:true, isdrawing:true }); sendChat(tok.get("name"),"I summoned my trusty spiritual weapon."); spawnFx(tok.get("left")+tok.get("width"),tok.get("top"),"burst-holy",tok.get("pageid")); } }); }); Unsummon: on("ready",function() { on("chat:message",function(msg){ if(msg.type=="api" && msg.content.indexOf("!removeSpiritualWeapon")==0) { var selected = msg.selected; if (selected===undefined) { sendChat("API","Please select a character."); return; } var tok = getObj("graphic",selected[0]._id); var spiritualWeapons = findObjs({ _type: "graphic", name: tok.get("name") + "'s Spiritual Weapon", }); _.each(spiritualWeapons, function(obj) { spawnFx(obj.get("left"),obj.get("top"),"burst-holy",obj.get("pageid")); obj.remove() }); } }); });