diff --git a/src/ds4.scss b/src/ds4.scss
index b2e83661..5eae4571 100644
--- a/src/ds4.scss
+++ b/src/ds4.scss
@@ -18,4 +18,5 @@
     @import "scss/components/items";
     @import "scss/components/description";
     @import "scss/components/character_values";
+    @import "scss/components/attributes_traits";
 }
diff --git a/src/module/config.ts b/src/module/config.ts
index cb5437b3..89d285cf 100644
--- a/src/module/config.ts
+++ b/src/module/config.ts
@@ -106,10 +106,10 @@ export const DS4 = {
      */
     traits: {
         strength: "DS4.TraitStrength",
-        constitution: "DS4.TraitConstitution",
         agility: "DS4.TraitAgility",
-        dexterity: "DS4.TraitDexterity",
         intellect: "DS4.TraitIntellect",
+        constitution: "DS4.TraitConstitution",
+        dexterity: "DS4.TraitDexterity",
         aura: "DS4.TraitAura",
     },
 
diff --git a/src/module/ds4.ts b/src/module/ds4.ts
index 18e066a5..99227746 100644
--- a/src/module/ds4.ts
+++ b/src/module/ds4.ts
@@ -37,6 +37,7 @@ async function registerHandlebarsPartials() {
         "systems/ds4/templates/item/partials/effects.hbs",
         "systems/ds4/templates/item/partials/body.hbs",
         "systems/ds4/templates/actor/partials/items-overview.hbs",
+        "systems/ds4/templates/actor/partials/attributes-traits.hbs",
     ];
     return loadTemplates(templatePaths);
 }
@@ -67,7 +68,7 @@ Hooks.once("setup", function () {
     ];
 
     // Exclude some from sorting where the default order matters
-    const noSort = [];
+    const noSort = ["attributes", "traits"];
 
     // Localize and sort CONFIG objects
     for (const o of toLocalize) {
diff --git a/src/scss/components/_attributes_traits.scss b/src/scss/components/_attributes_traits.scss
new file mode 100644
index 00000000..88ae9425
--- /dev/null
+++ b/src/scss/components/_attributes_traits.scss
@@ -0,0 +1,46 @@
+.attributes-traits {
+    margin-top: $margin-sm;
+    .attribute {
+        .attribute-label {
+            font-family: $font-heading;
+            font-size: 2em;
+            text-align: center;
+        }
+        .attribute-value {
+            border: 2px groove $c-border-groove;
+            line-height: 26px;
+            font-size: 1.5em;
+            text-align: center;
+            padding-left: 2px;
+            padding-right: 2px;
+            gap: 0;
+            input,
+            .attribute-value-total {
+                grid-column: span 2;
+            }
+        }
+    }
+    .trait {
+        .trait-label {
+            color: transparent;
+            font-family: $font-heading;
+            font-size: 2em;
+            text-align: center;
+            //text-shadow: -1px 1px 0 $c-black, 1px 1px 0 $c-black, 1px -1px 0 $c-black, -1px -1px 0 $c-black;
+            -webkit-text-stroke: 1px $c-black;
+        }
+        .trait-value {
+            border: 2px groove $c-border-groove;
+            font-size: 1.5em;
+            line-height: 26px;
+            text-align: center;
+            padding-left: 2px;
+            padding-right: 2px;
+            gap: 0;
+            input,
+            .trait-value-total {
+                grid-column: span 2;
+            }
+        }
+    }
+}
diff --git a/src/scss/components/_character_values.scss b/src/scss/components/_character_values.scss
index 7b6ec7d6..b27e2252 100644
--- a/src/scss/components/_character_values.scss
+++ b/src/scss/components/_character_values.scss
@@ -1,52 +1,6 @@
 header.sheet-header {
     .character-values {
         flex: 0 0 100%;
-        .attributes-traits {
-            margin-top: $margin-sm;
-            .attribute {
-                .attribute-label {
-                    font-family: $font-heading;
-                    font-size: 2em;
-                    text-align: center;
-                }
-                .attribute-value {
-                    border: 2px groove $c-border-groove;
-                    line-height: 26px;
-                    font-size: 1.5em;
-                    text-align: center;
-                    padding-left: 2px;
-                    padding-right: 2px;
-                    gap: 0;
-                    input,
-                    .attribute-value-total {
-                        grid-column: span 2;
-                    }
-                }
-            }
-            .trait {
-                .trait-label {
-                    color: transparent;
-                    font-family: $font-heading;
-                    font-size: 2em;
-                    text-align: center;
-                    //text-shadow: -1px 1px 0 $c-black, 1px 1px 0 $c-black, 1px -1px 0 $c-black, -1px -1px 0 $c-black;
-                    -webkit-text-stroke: 1px $c-black;
-                }
-                .trait-value {
-                    border: 2px groove $c-border-groove;
-                    font-size: 1.5em;
-                    line-height: 26px;
-                    text-align: center;
-                    padding-left: 2px;
-                    padding-right: 2px;
-                    gap: 0;
-                    input,
-                    .trait-value-total {
-                        grid-column: span 2;
-                    }
-                }
-            }
-        }
         .combat-values {
             margin-top: $margin-sm;
             .combat-value-with-formula {
diff --git a/src/templates/actor/actor-sheet.hbs b/src/templates/actor/actor-sheet.hbs
index 4f0c21f5..f288880e 100644
--- a/src/templates/actor/actor-sheet.hbs
+++ b/src/templates/actor/actor-sheet.hbs
@@ -81,86 +81,9 @@
                     </div>
                 </div>
             </div>
-            <div class="attributes-traits grid grid-3col">
-                <div class="attribute flexrow"><label for="data.attributes.body.total"
-                        class="attribute-label ">{{config.attributes.body}}</label>
-                    <div class="attribute-value flex15 grid grid-8col"><input type="number"
-                            name="data.attributes.body.base" value='{{data.attributes.body.base}}'
-                            data-dtype="Number" /><span> +
-                        </span><input type="number" name="data.attributes.body.mod" value='{{data.attributes.body.mod}}'
-                            data-dtype="Number" /><span> =
-                        </span><span class="attribute-value-total">{{data.attributes.body.total}}</span></div>
-                </div>
-                <div class="attribute flexrow"><label for="data.attributes.mobility.total"
-                        class="attribute-label">{{config.attributes.mobility}}</label>
-                    <div class="attribute-value flex15 grid grid-8col"><input type="number"
-                            name="data.attributes.mobility.base" value='{{data.attributes.mobility.base}}'
-                            data-dtype="Number" /><span> +
-                        </span><input type="number" name="data.attributes.mobility.mod"
-                            value='{{data.attributes.mobility.mod}}' data-dtype="Number" /><span> =
-                        </span><span class="attribute-value-total">{{data.attributes.mobility.total}}</span></div>
-                </div>
-                <div class="attribute flexrow"><label for="data.attributes.mind.total"
-                        class="attribute-label">{{config.attributes.mind}}</label>
-                    <div class="attribute-value flex15 grid grid-8col"><input type="number"
-                            name="data.attributes.mind.base" value='{{data.attributes.mind.base}}'
-                            data-dtype="Number" /><span> +
-                        </span><input type="number" name="data.attributes.mind.mod" value='{{data.attributes.mind.mod}}'
-                            data-dtype="Number" /><span> =
-                        </span><span class="attribute-value-total">{{data.attributes.mind.total}}</span></div>
-                </div>
-                <div class="trait flexrow"><label for="data.traits.strength.total"
-                        class="trait-label">{{config.traits.strength}}</label>
-                    <div class="trait-value flex15 grid grid-8col"><input type="number" name="data.traits.strength.base"
-                            value='{{data.traits.strength.base}}' data-dtype="Number" /><span> +
-                        </span><input type="number" name="data.traits.strength.mod" value='{{data.traits.strength.mod}}'
-                            data-dtype="Number" /><span> =
-                        </span><span class="trait-value-total">{{data.traits.strength.total}}</span></div>
-                </div>
-                <div class="trait flexrow"><label for="data.traits.agility.total"
-                        class="trait-label">{{config.traits.agility}}</label>
-                    <div class="trait-value flex15 grid grid-8col"><input type="number" name="data.traits.agility.base"
-                            value='{{data.traits.agility.base}}' data-dtype="Number" /><span> +
-                        </span><input type="number" name="data.traits.agility.mod" value='{{data.traits.agility.mod}}'
-                            data-dtype="Number" /><span> =
-                        </span><span class="trait-value-total">{{data.traits.agility.total}}</span></div>
-                </div>
-                <div class="trait flexrow"><label for="data.traits.intellect.total"
-                        class="trait-label">{{config.traits.intellect}}</label>
-                    <div class="trait-value flex15 grid grid-8col"><input type="number"
-                            name="data.traits.intellect.base" value='{{data.traits.intellect.base}}'
-                            data-dtype="Number" /><span> +
-                        </span><input type="number" name="data.traits.intellect.mod"
-                            value='{{data.traits.intellect.mod}}' data-dtype="Number" /><span> =
-                        </span><span class="trait-value-total">{{data.traits.intellect.total}}</span></div>
-                </div>
-                <div class="trait flexrow"><label for="data.traits.constitution.total"
-                        class="trait-label">{{config.traits.constitution}}</label>
-                    <div class="trait-value flex15 grid grid-8col"><input type="number"
-                            name="data.traits.constitution.base" value='{{data.traits.constitution.base}}'
-                            data-dtype="Number" /><span> +
-                        </span><input type="number" name="data.traits.constitution.mod"
-                            value='{{data.traits.constitution.mod}}' data-dtype="Number" /><span> =
-                        </span><span class="trait-value-total">{{data.traits.constitution.total}}</span></div>
-                </div>
-                <div class="trait flexrow"><label for="data.traits.dexterity.total"
-                        class="trait-label">{{config.traits.dexterity}}</label>
-                    <div class="trait-value flex15 grid grid-8col"><input type="number"
-                            name="data.traits.dexterity.base" value='{{data.traits.dexterity.base}}'
-                            data-dtype="Number" /><span> +
-                        </span><input type="number" name="data.traits.dexterity.mod"
-                            value='{{data.traits.dexterity.mod}}' data-dtype="Number" /><span> =
-                        </span><span class="trait-value-total">{{data.traits.dexterity.total}}</span></div>
-                </div>
-                <div class="trait flexrow"><label for="data.traits.aura.total"
-                        class="trait-label">{{config.traits.aura}}</label>
-                    <div class="trait-value flex15 grid grid-8col"><input type="number" name="data.traits.aura.base"
-                            value='{{data.traits.aura.base}}' data-dtype="Number" /><span> +
-                        </span><input type="number" name="data.traits.aura.mod" value='{{data.traits.aura.mod}}'
-                            data-dtype="Number" /><span> =
-                        </span><span class="trait-value-total">{{data.traits.aura.total}}</span></div>
-                </div>
-            </div>
+
+            {{> systems/ds4/templates/actor/partials/attributes-traits.hbs}}
+
             <div class="combat-values flexrow flex-between">
                 <div class="combat-value-with-formula">
                     <div class="combat-value hitPoints"><span
diff --git a/src/templates/actor/partials/attributes-traits.hbs b/src/templates/actor/partials/attributes-traits.hbs
new file mode 100644
index 00000000..14fece65
--- /dev/null
+++ b/src/templates/actor/partials/attributes-traits.hbs
@@ -0,0 +1,52 @@
+{{!-- ======================================================================== --}}
+{{!-- INLINE PARTIAL DEFINITIONS --}}
+{{!-- ======================================================================== --}}
+
+{{!--
+!-- Render an attribute.
+!--
+!-- @param attribute-label: The label to display for the attribute
+!-- @param attribute-key: The key of the attribute
+!-- @param attribute-data: The data for the attribute
+--}}
+
+{{#*inline "attribute"}}
+<div class="attribute flexrow"><label for="data.attributes.body.total"
+        class="attribute-label ">{{attribute-label}}</label>
+    <div class="attribute-value flex15 grid grid-8col"><input type="number"
+            name="data.attributes.{{attribute-key}}.base" value='{{attribute-data.base}}' data-dtype="Number" /><span> +
+        </span><input type="number" name="data.attributes.{{attribute-key}}.mod" value='{{attribute-data.mod}}'
+            data-dtype="Number" /><span> =
+        </span><span class="attribute-value-total">{{attribute-data.total}}</span></div>
+</div>
+{{/inline}}
+
+{{!--
+!-- Render a trait.
+!--
+!-- @param trait-label: The label to display for the trait
+!-- @param trait-key: The key of the trait
+!-- @param trait-data: The data for the trait
+--}}
+
+{{#*inline "trait"}}
+<div class="trait flexrow"><label for="data.traits.strength.total" class="trait-label">{{trait-label}}</label>
+    <div class="trait-value flex15 grid grid-8col"><input type="number" name="data.traits.{{trait-key}}.base"
+            value='{{trait-data.base}}' data-dtype="Number" /><span> +
+        </span><input type="number" name="data.traits.{{trait-key}}.mod" value='{{trait-data.mod}}'
+            data-dtype="Number" /><span> =
+        </span><span class="trait-value-total">{{trait-data.total}}</span></div>
+</div>
+{{/inline}}
+
+{{!-- ======================================================================== --}}
+
+<div class="attributes-traits grid grid-3col">
+    {{#each config.attributes as |attribute-label attribute-key|}}
+    {{> attribute attribute-label=attribute-label attribute-key=attribute-key attribute-data=(lookup ../data.attributes
+    attribute-key)}}
+    {{/each}}
+    {{#each config.traits as |trait-label trait-key|}}
+    {{> trait trait-label=trait-label trait-key=trait-key trait-data=(lookup ../data.traits trait-key)}}
+    {{/each}}
+</div>