i have done some updates already this is .35/.36,.. the beta minus the inventory sheet updates (and some updates on defense) (meaning it has the fix for ac dropdown) html with value="" replaced with value="0" (for most, sometimes value="10"): <a href="https://gist.github.com/plutosdad/d91aceb760bd274f" rel="nofollow">https://gist.github.com/plutosdad/d91aceb760bd274f</a>... javascript, mostly the same with a few fixes, but has some more logging: <a href="https://gist.github.com/plutosdad/3d06ef5509b19021" rel="nofollow">https://gist.github.com/plutosdad/3d06ef5509b19021</a>... actually please fork from my repository here <a href="https://github.com/plutosdad/roll20-character-shee" rel="nofollow">https://github.com/plutosdad/roll20-character-shee</a>... note user editable text fields still have value="" only user editable (and readonly) number fields are updated with defaults. I did make some changes to fix some places where it was not properly checking to see if the value was the same. Most of the time it will check if the current value on the sheet isNaN or is not equal to the new value, and if so only then it calls setAttrs (otherwise, the attribute appears even if the default is the same). So by fixing it in a few places I removed a few dozen attributes. I am stuck on a few though, most of the attributes being created are the buff grid and the skills. i cannot figure out why the buffs are all getting written. it checks before calling setAttrs, and it sees that 0=0, so it does not call it, and the log confirms that setAttrs is not being called. YET, the attributes are still full of buffn_name= 0 Same goes for skills, they are filling up the attributes, yet the logging shows setAttrs is not being called. So why are they appearing? I thought maybe the float was not exactly equal to an int in some places, BUT, it would log the write, so it's not that. To show what is being called i have been logging so it only writes when it will update. if (isNaN(currValue) || currValue !== newValue) { TAS.log({"function":functionname,"currValue":currValue","newValue":newValue}); setAttrs(setter); } anyway the above will save you a few hours :) (note, we can't simply not call the recalc on open depending on the version, because old sheets will have version 0, and the attributes will be full of macro language due to the autocalc fields. The recalc has to convert all those to numbers. I don't think there is a way to tell if the sheet is old, or merely a brand new one) deleting: as of right now we'd have to write an API script to delete. which may be valueable if it's a problem for users.