Yeah I figured that's what's happening. ... which would be why GetBaseObject isn't working when its in an inventory. Cipscis, am I understanding correctly then that self should return the armor the script is attached to without any other calling needed to be made? And if so, since no other callings need to be made then it should return the armor if it is in or out of an inventory. Hmmm, let me try this real quick before I head to work.. Strange, it now works when dropping or picking it up from the ground but not when taking it from an actor or adding via console/forge. But we're closer! I think I understand what is going on now, self gets set when its out of an inventory so then it'll work, but until then it doesn't know what itself even is. So for it to work you'd need to drop every armor before using it. I think the next step is to see the processing order of OnContainerChange and OnItemAdded. If OnItemAdded runs first I can just take the object that returns and use that for the OnContainerChange event, if not, then is there perhaps a command to have a script wait a bit then finish processing?