Very odd - looking at the Legacy sheet, there doesn't seem to be anywhere else to look but the Item Mods. The Attribute update is @{strength_base} + @{strength_bonus} + 'item_mod'. We can see @{strength_bonus} on the sheet, and Keith's suggestion should have weeded that out anyway. Of course, there's no guarantee that the current sheet hasn't completely rewritten this section, but one thing stuck out at me: if ( mod . indexOf ( ":" ) > - 1 ) { var new_base = ! isNaN ( parseInt ( mod . replace ( / [^ 0-9 ] / g , "" ), 10 )) ? parseInt ( mod . replace ( / [^ 0-9 ] / g , "" ), 10 ) : false ; item_base = new_base && new_base > item_base ? new_base : item_base ; } else if ( mod . indexOf ( "-" ) > - 1 ) { var new_mod = ! isNaN ( parseInt ( mod . replace ( / [^ 0-9 ] / g , "" ), 10 )) ? parseInt ( mod . replace ( / [^ 0-9 ] / g , "" ), 10 ) : false ; item_bonus = new_mod ? item_bonus - new_mod : item_bonus ; } else { var new_mod = ! isNaN ( parseInt ( mod . replace ( / [^ 0-9 ] / g , "" ), 10 )) ? parseInt ( mod . replace ( / [^ 0-9 ] / g , "" ), 10 ) : false ; item_bonus = new_mod ? item_bonus + new_mod : item_bonus ; } When this loops through Item Mods, it looks first for a colon ':'. Strength: 18 will set it to 18 unless it's already higher. Then it looks for '-', a malus to the attribute, and applies that. Then everything else falls through to the last section, and it gets added to item_mod. If some garbage from the repeating rows is somehow getting through to this part, that last else{} is going to strip out everything apart from the digits, then add it to your strength. I'm kind of thinking this has to be where these crazy errors are coming from, unless it looks very different these days (the Legacy sheet is getting pretty old... but I don't remember Item Mods changing dramatically.