Ok, there's several things going on here, and to understand what's happening we first need to dive into how the Roll20 character sheet system works. So, let's take a look. NOTE, these are observational and not based on knowledge of how Roll20 has actually set up the networking and system. So, first of all, there's three locations for attribute data in the system. The HTML defined attributes The attributes stored on Firebase The attributes on the attributes and abilities tab Aside from the layout, the HTML defines what the default value of the attributes is the first time that the character sheet is loaded. When a character sheet is first opened, Firebase only updates the HTML for a given attribute if the value it has stored is different from the default value. This check likely goes something like: HTML: "Firebase, here's what the attribute starts as" FB: "Thanks" whispers to self, I already know that, you told me last week! Additionally, the attributes and abilities tab only adds an attribute to the list visible there when the value is changed from the default. So, the exchange of information looks something like this: HTML <==>> Firebase <==> AA tab Ok, so we've got 3 areas where the attribute values are stored/displayed and 2 where they can be edited. However, the exchange of information is not always the same (hence the funky arrows between FB and HTML). When a sheet is first opened, Firebase only gives it the information that has previously been set by a user. The HTML then reacts to those changes appropriately (like checking checkboxes for valid values). Now, let's bring this around to your specific issue. If the checkbox attribute's value has never been changed, Firebase does not tell the HTML that the value is a given value as it assumes that the HTML already knows what the default value is supposed to be and has reacted accordingly. Now, when a change is made through the html interface (say clicking a checkbox), the html updates it's references to the firebase values and gets the current values for everything. In your case this then triggers the HTML to realize that the checkbox is set to 0 and updates the checked state of that checkbox. So, that's what's going on with why it displays incorrectly the first time you open the sheet with it unchanged from its default value (if you ever toggled it back and forth, it would display correctly). Another problem for your code though is that you've setup a checkbox so that it is working against how Roll20 character sheet checkboxes work. In HTML, checkboxes have a default checked value of "on". In Roll20 character sheets, they also have a default unchecked value, which is 0. This is set by the backend of Roll20 and is untouchable by character sheet code. What this means for your code, is that your 0-input is trying to be both checked and unchecked. And finally, as I mentioned in an earlier post, your current set up is attempting to use checkboxes as radios. By which, I mean you have multiple inputs for a single attribute with separate checked-values and one of them is supposed to always be checked leaving the other(s) unchecked. That's pretty much the definition of a set of radio buttons. Now, as GiGs rightly pointed out, your current setup really only needs a single checkbox, with a styling state based on the checkbox being unchecked, and one for it being checked. However, if you are planning to add more states or you want to display an "unchecked" input at each display mode, then you'd need a radio.