diff --git a/src/art/vector/layers/Art_Vector_Cat_Ear_Back.svg b/src/art/vector/layers/Art_Vector_Cat_Ear_Back.svg
index 299009f5ccd71c891795891a116a98b754a94b87..f2824e6a276cd10acc8d95727ed16e31f3ae50c8 100644
--- a/src/art/vector/layers/Art_Vector_Cat_Ear_Back.svg
+++ b/src/art/vector/layers/Art_Vector_Cat_Ear_Back.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000"><path style="display:inline;fill-opacity:1;fill:#20202c;stroke-width:1.09067011" d="m 248.73736,68.964871 c 0,0 1.69861,-0.804687 4.08156,-0.299212 2.38295,0.505475 23.75731,3.393902 29.82301,5.415802 6.06569,2.021898 7.14885,3.466112 7.14885,3.466112 L 263.21726,106.7929 c -3.84107,-5.31888 -4.93514,-8.768348 -7.63681,-17.615026 -1.84138,-6.029593 -1.55793,-8.849384 -2.81153,-12.285769 -0.74632,-2.04581 -1.39753,-4.595174 -4.03156,-7.927234 z" id="path2"/><path d="m 248.73736,68.964871 c 0,0 1.69861,-0.804687 4.08156,-0.299212 2.38295,0.505475 23.75731,3.393902 29.82301,5.415802 6.06569,2.021898 7.14885,3.466112 7.14885,3.466112 l -9.45442,10.405004 c -8.89399,-4.0001 -15.68619,-8.81104 -20.05716,-12.416027 -2.33857,-1.928752 -6.80539,-4.786815 -11.54184,-6.571679 z" style="display:inline;fill-opacity:1;fill:#333344;stroke-width:1.09067011" id="path4"/><path style="fill-opacity:1;fill:#fefefe;stroke-width:1.09067011" d="m 251.82217,72.78348 c 0,0 4.58923,1.460454 7.26102,0.648083 l 19.57572,12.076963 c 0,0 -14.32239,6.372867 -17.57187,14.965934 0,0 -0.28885,-1.805263 0.1083,-3.538319 l -0.93872,3.141169 c 0,0 -0.32495,-2.166325 0.18052,-3.82717 0,0 -1.08316,-0.758212 -2.45516,1.444213 0,0 0.32494,-3.646639 1.84136,-5.307486 -1.84137,0.180528 -4.44095,2.166322 -4.44095,2.166322 0,0 -0.14441,-7.040542 4.76591,-9.062442 -4.11601,0.216633 -6.93223,3.791062 -6.93223,3.791062 0,0 -0.36105,-6.82391 3.75496,-8.015386 -2.99675,0.938738 -4.29654,3.71885 -4.29654,3.71885 0,0 -0.54157,-3.827166 0.93874,-6.246224 -0.686,-0.216632 -1.73305,0.613791 -1.73305,0.613791 0,0 0.79431,-2.419059 3.32169,-3.285586 -2.5839,-0.566619 -3.3797,-3.283774 -3.3797,-3.283774 z" id="path6"/></svg>
\ No newline at end of file
+<svg viewBox="0 0 560 1000"><path style="display:inline;fill-opacity:1;fill:#20202c;stroke-width:1.09067011" d="m 248.73736,68.964871 c 0,0 1.69861,-0.804687 4.08156,-0.299212 2.38295,0.505475 23.75731,3.393902 29.82301,5.415802 6.06569,2.021898 7.14885,3.466112 7.14885,3.466112 L 263.21726,106.7929 c -3.84107,-5.31888 -4.93514,-8.768348 -7.63681,-17.615026 -1.84138,-6.029593 -1.55793,-8.849384 -2.81153,-12.285769 -0.74632,-2.04581 -1.39753,-4.595174 -4.03156,-7.927234 z" id="path2"/><path d="m 248.73736,68.964871 c 0,0 1.69861,-0.804687 4.08156,-0.299212 2.38295,0.505475 23.75731,3.393902 29.82301,5.415802 6.06569,2.021898 7.14885,3.466112 7.14885,3.466112 l -9.45442,10.405004 c -8.89399,-4.0001 -15.68619,-8.81104 -20.05716,-12.416027 -2.33857,-1.928752 -6.80539,-4.786815 -11.54184,-6.571679 z" style="display:inline;fill-opacity:1;fill:#333344;stroke-width:1.09067011" id="path4"/><path style="fill-opacity:1;fill:#fefefe;stroke-width:1.09067011" d="m 251.82217,72.78348 c 0,0 4.58923,1.460454 7.26102,0.648083 l 19.57572,12.076963 c 0,0 -14.32239,6.372867 -17.57187,14.965934 0,0 -0.28885,-1.805263 0.1083,-3.538319 l -0.93872,3.141169 c 0,0 -0.32495,-2.166325 0.18052,-3.82717 0,0 -1.08316,-0.758212 -2.45516,1.444213 0,0 0.32494,-3.646639 1.84136,-5.307486 -1.84137,0.180528 -4.44095,2.166322 -4.44095,2.166322 0,0 -0.14441,-7.040542 4.76591,-9.062442 -4.11601,0.216633 -6.93223,3.791062 -6.93223,3.791062 0,0 -0.36105,-6.82391 3.75496,-8.015386 -2.99675,0.938738 -4.29654,3.71885 -4.29654,3.71885 0,0 -0.54157,-3.827166 0.93874,-6.246224 -0.686,-0.216632 -1.73305,0.613791 -1.73305,0.613791 0,0 0.79431,-2.419059 3.32169,-3.285586 -2.5839,-0.566619 -3.3797,-3.283774 -3.3797,-3.283774 z" id="path6"/></svg>
diff --git a/src/art/vector/layers/Art_Vector_Cat_Ear_Fore.svg b/src/art/vector/layers/Art_Vector_Cat_Ear_Fore.svg
index 6a21697266326c532aa14d96326ec4c76d7f8478..1ab856e1586fb48eff7ad04f80c4b2d0c4b60517 100644
--- a/src/art/vector/layers/Art_Vector_Cat_Ear_Fore.svg
+++ b/src/art/vector/layers/Art_Vector_Cat_Ear_Fore.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000"><g style="display:inline" transform="translate(0,3e-6)" id="g8-9"><path style="display:inline;fill-opacity:1;fill:#20202c;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" d="m 308.1475,77.54163 c 0,0 12.76065,-8.72344 26.22373,-9.571872 11.01415,-0.694103 19.3005,-2.094451 19.3005,-2.094451 -1.1752,8.016637 -7.95821,31.134787 -22.41696,46.848853 0,0 1.03532,-26.317653 -23.10727,-35.18253 z" id="path2-5"/><path d="m 353.67173,65.875307 c -1.1752,8.016637 -7.95821,31.134787 -22.41696,46.848853 0,0 0.0174,-0.44206 -0.005,-1.23089 -0.1085,-3.84062 -1.15748,-15.901417 -9.73296,-25.185131 7.53822,-11.504443 19.52704,-16.919867 32.15481,-20.432832 z" style="display:inline;fill-opacity:1;fill:#333344;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" id="path4-7"/><path style="display:inline;fill-opacity:1;fill:#fefefe;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" d="m 329.49165,100.71363 c -1.35994,-4.601307 -3.757,-9.839308 -7.97484,-14.405491 4.85489,-7.409284 11.55582,-12.292945 19.08455,-15.769361 0,0 5.17674,-0.18227 8.51755,1.867294 -0.16223,0.07853 -2.7722,0.606429 -4.0879,1.030675 2.49749,0.129635 3.54594,1.366431 3.54594,1.366431 0,0 -0.91465,0.05439 -2.3119,0.89546 2.85074,0.89458 4.63218,5.458641 4.63218,5.458641 0,0 -2.19492,-0.350727 -4.86496,0.149253 2.06512,0.935863 3.25191,4.890565 3.25191,4.890565 0,0 -2.18348,-0.526951 -6.00364,-0.793573 4.30345,1.520613 4.48699,6.023984 4.48699,6.023984 0,0 -3.83009,-2.647995 -4.31294,-3.165587 1.78858,2.77439 1.68141,5.83086 1.68141,5.83086 0,0 -1.28005,-1.529562 -3.01908,-2.13864 0.54376,1.109778 0.54477,3.262668 0.54477,3.262668 0,0 -2.12647,-1.184307 -2.69251,-1.999674 0.45817,3.293475 -0.44441,8.565455 -0.44441,8.565455 0,0 -2.3265,-3.196931 -3.16399,-5.032441 0.25185,3.018194 -0.90576,5.929071 -0.90576,5.929071 0,0 -0.0958,-4.496089 -0.9266,-5.750878 0.28951,3.866948 -0.68272,5.889828 -1.896,8.463388 0,0 -1.77802,-2.46182 -3.14077,-4.6781 z" id="path6-3"/></g></svg>
\ No newline at end of file
+<svg viewBox="0 0 560 1000"><g data-transform="art" style="display:inline" transform="translate(0,3e-6)" id="g8-9"><path style="display:inline;fill-opacity:1;fill:#20202c;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" d="m 308.1475,77.54163 c 0,0 12.76065,-8.72344 26.22373,-9.571872 11.01415,-0.694103 19.3005,-2.094451 19.3005,-2.094451 -1.1752,8.016637 -7.95821,31.134787 -22.41696,46.848853 0,0 1.03532,-26.317653 -23.10727,-35.18253 z" id="path2-5"/><path d="m 353.67173,65.875307 c -1.1752,8.016637 -7.95821,31.134787 -22.41696,46.848853 0,0 0.0174,-0.44206 -0.005,-1.23089 -0.1085,-3.84062 -1.15748,-15.901417 -9.73296,-25.185131 7.53822,-11.504443 19.52704,-16.919867 32.15481,-20.432832 z" style="display:inline;fill-opacity:1;fill:#333344;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" id="path4-7"/><path style="display:inline;fill-opacity:1;fill:#fefefe;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" d="m 329.49165,100.71363 c -1.35994,-4.601307 -3.757,-9.839308 -7.97484,-14.405491 4.85489,-7.409284 11.55582,-12.292945 19.08455,-15.769361 0,0 5.17674,-0.18227 8.51755,1.867294 -0.16223,0.07853 -2.7722,0.606429 -4.0879,1.030675 2.49749,0.129635 3.54594,1.366431 3.54594,1.366431 0,0 -0.91465,0.05439 -2.3119,0.89546 2.85074,0.89458 4.63218,5.458641 4.63218,5.458641 0,0 -2.19492,-0.350727 -4.86496,0.149253 2.06512,0.935863 3.25191,4.890565 3.25191,4.890565 0,0 -2.18348,-0.526951 -6.00364,-0.793573 4.30345,1.520613 4.48699,6.023984 4.48699,6.023984 0,0 -3.83009,-2.647995 -4.31294,-3.165587 1.78858,2.77439 1.68141,5.83086 1.68141,5.83086 0,0 -1.28005,-1.529562 -3.01908,-2.13864 0.54376,1.109778 0.54477,3.262668 0.54477,3.262668 0,0 -2.12647,-1.184307 -2.69251,-1.999674 0.45817,3.293475 -0.44441,8.565455 -0.44441,8.565455 0,0 -2.3265,-3.196931 -3.16399,-5.032441 0.25185,3.018194 -0.90576,5.929071 -0.90576,5.929071 0,0 -0.0958,-4.496089 -0.9266,-5.750878 0.28951,3.866948 -0.68272,5.889828 -1.896,8.463388 0,0 -1.77802,-2.46182 -3.14077,-4.6781 z" id="path6-3"/></g></svg>
diff --git a/src/art/vector/layers/Art_Vector_Cat_Tail.svg b/src/art/vector/layers/Art_Vector_Cat_Tail.svg
index e318584f62809e53333ed0ce9afaebe4c00346a9..da902f86a589841a3aba9622eb5fe5178b543b8a 100644
--- a/src/art/vector/layers/Art_Vector_Cat_Tail.svg
+++ b/src/art/vector/layers/Art_Vector_Cat_Tail.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000"><path d="m 342.15888,477.17932 c 0,0 113.6156,70.85179 139.77284,-28.74333 25.05714,-95.4064 -57.66395,-93.79968 -48.14882,-165.08654 3.40586,-25.5165 38.15951,-39.43051 38.15951,-39.43051" style="display:inline;fill-opacity:1;fill:none;opacity:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:16;stroke:#20202c;vector-effect:none" id="path2502"/><path style="display:inline;fill-opacity:1;fill:none;opacity:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:16;stroke:#fefefe;vector-effect:none" d="m 442.29877,265.01668 c 11.34263,-13.77073 29.64364,-21.09774 29.64364,-21.09774" id="path2504-9"/></svg>
\ No newline at end of file
+<svg viewBox="0 0 560 1000"><path d="m 342.15888,477.17932 c 0,0 113.6156,70.85179 139.77284,-28.74333 25.05714,-95.4064 -57.66395,-93.79968 -48.14882,-165.08654 3.40586,-25.5165 38.15951,-39.43051 38.15951,-39.43051" style="display:inline;fill-opacity:1;fill:none;opacity:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:16;stroke:#20202c;vector-effect:none" id="path2502"/><path style="display:inline;fill-opacity:1;fill:none;opacity:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:16;stroke:#fefefe;vector-effect:none" d="m 442.29877,265.01668 c 11.34263,-13.77073 29.64364,-21.09774 29.64364,-21.09774" id="path2504-9"/></svg>
diff --git a/src/art/vector/layers/Art_Vector_Cow_Ear_Back.svg b/src/art/vector/layers/Art_Vector_Cow_Ear_Back.svg
index 7bb466b29d5f20cee36cbc6a821e25cfacd2b65c..27af8762fa4d00897ced83b059c3dad4c9994820 100644
--- a/src/art/vector/layers/Art_Vector_Cow_Ear_Back.svg
+++ b/src/art/vector/layers/Art_Vector_Cow_Ear_Back.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1" fill="#ffd5d5"><path d="M268.97 88.19c3.57 1.86 2.25 4.2 10.8 1.75l-3.88 16.12c-11.15-.78-4.86 6.7-19.13 5.86-14.26-.84-19.85-9.81-21.72-17.47 7.4-9.24 23.72-11.42 33.93-6.26z" fill="#87553a"/><path d="M255.22 99.84l3.57-.18s-.23 4.14 2.5 4.53l.55 7.45-8.2.53-.3-7.17s2.4.3 1.88-5.16z" fill="#f1ab2b"/></svg>
\ No newline at end of file
+<svg viewBox="0 0 560 1000"><path d="M268.97 88.19c3.57 1.86 2.25 4.2 10.8 1.75l-3.88 16.12c-11.15-.78-4.86 6.7-19.13 5.86-14.26-.84-19.85-9.81-21.72-17.47 7.4-9.24 23.72-11.42 33.93-6.26z" fill="#87553a"/><path d="M255.22 99.84l3.57-.18s-.23 4.14 2.5 4.53l.55 7.45-8.2.53-.3-7.17s2.4.3 1.88-5.16z" fill="#f1ab2b"/></svg>
diff --git a/src/art/vector/layers/Art_Vector_Cow_Ear_Fore.svg b/src/art/vector/layers/Art_Vector_Cow_Ear_Fore.svg
index 64d0d46c7b2bd0eb2dda2432355d1581451e4688..b15a49ac861ab184d708457f03863240b6b7159f 100644
--- a/src/art/vector/layers/Art_Vector_Cow_Ear_Fore.svg
+++ b/src/art/vector/layers/Art_Vector_Cow_Ear_Fore.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1" fill="#ffd5d5"><path d="M341.29 87.85c-4.02 2.48-4.66 5.24-10.49.95 3.7 6.63 5.61 18.01 4.8 23.83 10.25-5.13 5.33 4.15 21.96 1.98 16.62-2.18 22.4-13.14 23.95-22.26-9.43-10.2-28.7-11.38-40.22-4.5z" fill="#87553a"/><path d="M354.75 101.34l3.78.9s-1.5 4.25 1.23 5.48l-1.68 7.94-8.71-1.94 1.85-7.57s2.42 1.06 3.53-4.8z" fill="#f1ab2b"/></svg>
\ No newline at end of file
+<svg viewBox="0 0 560 1000"><path d="M341.29 87.85c-4.02 2.48-4.66 5.24-10.49.95 3.7 6.63 5.61 18.01 4.8 23.83 10.25-5.13 5.33 4.15 21.96 1.98 16.62-2.18 22.4-13.14 23.95-22.26-9.43-10.2-28.7-11.38-40.22-4.5z" fill="#87553a"/><path d="M354.75 101.34l3.78.9s-1.5 4.25 1.23 5.48l-1.68 7.94-8.71-1.94 1.85-7.57s2.42 1.06 3.53-4.8z" fill="#f1ab2b"/></svg>
diff --git a/src/art/vector/layers/Art_Vector_Cow_Tail.svg b/src/art/vector/layers/Art_Vector_Cow_Tail.svg
index 59f45e8b2545c4389dde4a8a6fef6dcade7dbc45..3723e6f4681bb606e49d688bbe1fe84373e4e9c6 100644
--- a/src/art/vector/layers/Art_Vector_Cow_Tail.svg
+++ b/src/art/vector/layers/Art_Vector_Cow_Tail.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1" fill="#ffd5d5"><path d="M421.12 602.38l.5 1.96c.47 3.84 4.3 13.82-4.74 15.06.55-2.29 2.45-6 2.21-7.57 0 0-.5 3.82-3.16 5.93-.72.57-1.16 2.13-.56 3.9-1.43-.52-2.62-3.79-1.53-5.34 1.03-1.46 2.62-3.16 2.3-4.99-.14 1.55-1.5 3.76-3.36 5.07-1.53 1.08-2.64 1.86-5.08 1.88 3.7-2.34 3.72-4.93 4.95-6.58a5.18 5.18 0 001.05-3.32l-1.46-4.45z" fill="#e7d0bf"/><path d="M412.19 561.3c-.88 17.5 3.89 38 3.89 38" fill="none" stroke="#ebebeb" stroke-width="5"/><path d="M321.75 480.5s89.19-57.34 90.44 80.8" fill="none" stroke="#704a2f" stroke-width="5" stroke-linecap="round"/><path d="M416.6 589.3l-4.88-.16c1.33 8.83-6.77 22.18-6.77 22.18s4.67-3.52 5.94-8.88c-.34 2.04-.79 5.73.16 7.44 1.33 2.41 2.9 4.37 2.9 4.37s-1.1-4.14-1.1-7c0-2.86 0 3.23 1.33 4.66-.78-4.74.16-4.51.16-4.51s1.17 1.43 1.01 4.29c1.1-3.84 0-5.42 0-5.42s2.36 2.4 2.2 5.72c.22-1.32.27-2.3.25-3.08.24.9.56 1.84 1 2.33 1.02 1.13.63 3.46.63 3.46s1.8-3.61.7-5.8c-1.1-2.18 0-3.8 0-3.8-.07 3.24 1.58 1.76 1.34 3.5-.2 1.4 1.13 1.58 1.88 2.94-.98-3.46 1.49-3.61-.04-6.81l-.5-1.06c.69.7 1.56 1.58 1.95 2.3.5.94 1.3 5.68 1.3 5.68s.1-1.47-.32-4.78c-.42-3.21-1.62-3.02-4.13-6.9.73-1.74.46-3.08-3.18-7.1-.93-1-1.84-3.57-1.84-3.57z" fill="#ebebeb"/></svg>
\ No newline at end of file
+<svg viewBox="0 0 560 1000"><path d="M421.12 602.38l.5 1.96c.47 3.84 4.3 13.82-4.74 15.06.55-2.29 2.45-6 2.21-7.57 0 0-.5 3.82-3.16 5.93-.72.57-1.16 2.13-.56 3.9-1.43-.52-2.62-3.79-1.53-5.34 1.03-1.46 2.62-3.16 2.3-4.99-.14 1.55-1.5 3.76-3.36 5.07-1.53 1.08-2.64 1.86-5.08 1.88 3.7-2.34 3.72-4.93 4.95-6.58a5.18 5.18 0 001.05-3.32l-1.46-4.45z" fill="#e7d0bf"/><path d="M412.19 561.3c-.88 17.5 3.89 38 3.89 38" fill="none" stroke="#ebebeb" stroke-width="5"/><path d="M321.75 480.5s89.19-57.34 90.44 80.8" fill="none" stroke="#704a2f" stroke-width="5" stroke-linecap="round"/><path d="M416.6 589.3l-4.88-.16c1.33 8.83-6.77 22.18-6.77 22.18s4.67-3.52 5.94-8.88c-.34 2.04-.79 5.73.16 7.44 1.33 2.41 2.9 4.37 2.9 4.37s-1.1-4.14-1.1-7c0-2.86 0 3.23 1.33 4.66-.78-4.74.16-4.51.16-4.51s1.17 1.43 1.01 4.29c1.1-3.84 0-5.42 0-5.42s2.36 2.4 2.2 5.72c.22-1.32.27-2.3.25-3.08.24.9.56 1.84 1 2.33 1.02 1.13.63 3.46.63 3.46s1.8-3.61.7-5.8c-1.1-2.18 0-3.8 0-3.8-.07 3.24 1.58 1.76 1.34 3.5-.2 1.4 1.13 1.58 1.88 2.94-.98-3.46 1.49-3.61-.04-6.81l-.5-1.06c.69.7 1.56 1.58 1.95 2.3.5.94 1.3 5.68 1.3 5.68s.1-1.47-.32-4.78c-.42-3.21-1.62-3.02-4.13-6.9.73-1.74.46-3.08-3.18-7.1-.93-1-1.84-3.57-1.84-3.57z" fill="#ebebeb"/></svg>
diff --git a/src/art/vector/layers/Art_Vector_Fox_Ear_Back.svg b/src/art/vector/layers/Art_Vector_Fox_Ear_Back.svg
index 3b23f24d77a52b746ba7b1d5aef98202541688b0..70a2d64a751850468298e73295123d0ef3536ff8 100644
--- a/src/art/vector/layers/Art_Vector_Fox_Ear_Back.svg
+++ b/src/art/vector/layers/Art_Vector_Fox_Ear_Back.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1"><path d="M260 53c-.7 0-1.3.4-1.4 1.8 0 .3.2.6.5.9l-.1 3.6c.3.7-.3 2 1.3 1.8 2.5 1 .4 3.8 1.9 5.2l-.6 3.7c1.5.7 1.2 2.2 1.7 3.4-.7.2-.7 1-1 1.6l1.2 1.3c1 1.2 1.1 2.9 2.6 3.8.5.5.6 1.2.7 2l-.1.5V84c-1 1.1-1 2.5-1.2 3.8 1.6-.3 1.9 1 2.4 2 0 1.3-2 1-1.9 2.4v.6l-.2.2c0 .1 0 .2.3.3h.6l1.3-.8v.5l1.2-.9.6.7 1.8-1.7V92l2-1.3c.4-.4 1-.8.8-1.5 1.2 0 2.1-.8 3-1.5.3-.6 1-1 .6-1.8.5-.1.9-.5 1.2-.8l.8-.8.3-.1.1-.1c.3-.2.7-.2 1-.3 1-.3 2-.6 2.5-1.6v-.6c.5-.2 1-.5 1.1-1.1.6-.1 1-.6 1.3-1l.8-.5h.6c.5 0 .8-.3 1-.7.3-.6.3-1.2.2-1.8l-.6-1.2-.8-1.3c-.4-.7-.7-1.4-1.3-2-.4-.3-.8-.7-1.4-.7l-1.2-.8-2.4-2.5-1.2-.6c-.8-.3-1-1.6-2.2-1.3-.3-1.4-1.6-2-2.3-3.1l-1.3-.1-.6-.6c0-1.3-1.4-1.6-2-2.5-.4 0-.8-.7-1.3-.2-.3-1.5-1.9-1.8-2.6-2.9-1.7-.3-2.7-2-4.2-2.6-1-.9-1-.8-1.3-.7h-.6c-.5-.3-1-.5-1.5-.5z" fill="#863b3b"/></svg>
\ No newline at end of file
+<svg viewBox="0 0 560 1000"><path d="M260 53c-.7 0-1.3.4-1.4 1.8 0 .3.2.6.5.9l-.1 3.6c.3.7-.3 2 1.3 1.8 2.5 1 .4 3.8 1.9 5.2l-.6 3.7c1.5.7 1.2 2.2 1.7 3.4-.7.2-.7 1-1 1.6l1.2 1.3c1 1.2 1.1 2.9 2.6 3.8.5.5.6 1.2.7 2l-.1.5V84c-1 1.1-1 2.5-1.2 3.8 1.6-.3 1.9 1 2.4 2 0 1.3-2 1-1.9 2.4v.6l-.2.2c0 .1 0 .2.3.3h.6l1.3-.8v.5l1.2-.9.6.7 1.8-1.7V92l2-1.3c.4-.4 1-.8.8-1.5 1.2 0 2.1-.8 3-1.5.3-.6 1-1 .6-1.8.5-.1.9-.5 1.2-.8l.8-.8.3-.1.1-.1c.3-.2.7-.2 1-.3 1-.3 2-.6 2.5-1.6v-.6c.5-.2 1-.5 1.1-1.1.6-.1 1-.6 1.3-1l.8-.5h.6c.5 0 .8-.3 1-.7.3-.6.3-1.2.2-1.8l-.6-1.2-.8-1.3c-.4-.7-.7-1.4-1.3-2-.4-.3-.8-.7-1.4-.7l-1.2-.8-2.4-2.5-1.2-.6c-.8-.3-1-1.6-2.2-1.3-.3-1.4-1.6-2-2.3-3.1l-1.3-.1-.6-.6c0-1.3-1.4-1.6-2-2.5-.4 0-.8-.7-1.3-.2-.3-1.5-1.9-1.8-2.6-2.9-1.7-.3-2.7-2-4.2-2.6-1-.9-1-.8-1.3-.7h-.6c-.5-.3-1-.5-1.5-.5z" fill="#863b3b"/></svg>
diff --git a/src/art/vector/layers/Art_Vector_Fox_Ear_Fore.svg b/src/art/vector/layers/Art_Vector_Fox_Ear_Fore.svg
index d69e3a3eb653f95ec47b482cb4a0e8dfb5603fa1..29e309fa80a7f1521e6f9ba94f4934f05f41a294 100644
--- a/src/art/vector/layers/Art_Vector_Fox_Ear_Fore.svg
+++ b/src/art/vector/layers/Art_Vector_Fox_Ear_Fore.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1"><path d="M340 52.9c-.2 0-.5.3-.7.5-.5 0-1 0-1.3.6 0 0-.7 0-1 .3-.4.2-.8 1.2-.8 1.2-2 1.2-2.2 1.9-2 2.4-1.2 0-1.8 1-2.5 1.8-1-.1-1.9 1.8-2.5 2.6-.6-.5-4.5 1.6-3.3 2.8l-.5.4c-.5 0-1.2-.6-1.2-.6-.8.6-.9 1.3-.6 2.1 0 .3.2.5.4.7-1 1.2-2.8 1.6-3.1 3.4l-.7.7c-.6.7-1.7.9-2.4 1.6-.4.5-.4 1-.3 1.7-.4 2.3-.2 2.7 1.8 2.4l-.2.6v.1c-.4.6-.3 1.2 0 1.8.7 1.3 1.5 2.4 3.2 2.1h.2l.1.1.1.1c-1.2 1-1.1 2-.4 3 .8 1.2 1.1 2.4 1.4 3.7 1.2 1.5 2.2 3.1 4 4 3.2 2.1 3.5 9.1 12 10.2-.3-.8-1-1.4-.9-2l.7.6c.8.2 1.4 0 2-.5l.8-.4c.5-.3.6-.9.8-1.3l.7-.7v-1.2h.6c-.5-1-.3-3.3-.7-4.4 1.5-.5 1.2-2.6 2.6-3.1.9-.6.5-3.4.5-5.1l-.2-6v-.9s.1.4.4.5l.4-4.4c1.2-2.8 1.3-5.7 1.3-8.7 0-.7-.2-1.2-.2-1.2l-.2 1-.2-5.4-.5-.3c0-2.4-.8-5-2.6-6.2 0 0 .1-.3-.7-.7-.7-.3-4 0-4.3 0z" fill="#863b3b"/><path d="M340.4 68.9c-1.2-.2-2.1 1.3-3.4.6l-.3-.2-3 1.9-.7 2.5c.7 1.3.3 2-1.2 2v1.1c.6.5.6 1.2.5 2-1 1-.6 2.3-.7 3.4-.2 2-1 3.5-3 4.1 1.5 2.4 4.6 3.5 5.7 6.4l.7 1.8c1.3-1.5 1.9-3 1.1-5.1-.6-1.6.1-3 1.8-3.9.6 0 1.3-.3 1.7 0l.2-1.6c-1.1 0-1.2-.9-1.1-2-.4-.7-.4-1.3.6-1.3.5.3.8.8 1.2 1l.6-.3h-.2c-1-1.3-.8-2.8-.5-4 .6-2.8.5-5.6 0-8.4z"/></svg>
\ No newline at end of file
+<svg viewBox="0 0 560 1000"><path d="M340 52.9c-.2 0-.5.3-.7.5-.5 0-1 0-1.3.6 0 0-.7 0-1 .3-.4.2-.8 1.2-.8 1.2-2 1.2-2.2 1.9-2 2.4-1.2 0-1.8 1-2.5 1.8-1-.1-1.9 1.8-2.5 2.6-.6-.5-4.5 1.6-3.3 2.8l-.5.4c-.5 0-1.2-.6-1.2-.6-.8.6-.9 1.3-.6 2.1 0 .3.2.5.4.7-1 1.2-2.8 1.6-3.1 3.4l-.7.7c-.6.7-1.7.9-2.4 1.6-.4.5-.4 1-.3 1.7-.4 2.3-.2 2.7 1.8 2.4l-.2.6v.1c-.4.6-.3 1.2 0 1.8.7 1.3 1.5 2.4 3.2 2.1h.2l.1.1.1.1c-1.2 1-1.1 2-.4 3 .8 1.2 1.1 2.4 1.4 3.7 1.2 1.5 2.2 3.1 4 4 3.2 2.1 3.5 9.1 12 10.2-.3-.8-1-1.4-.9-2l.7.6c.8.2 1.4 0 2-.5l.8-.4c.5-.3.6-.9.8-1.3l.7-.7v-1.2h.6c-.5-1-.3-3.3-.7-4.4 1.5-.5 1.2-2.6 2.6-3.1.9-.6.5-3.4.5-5.1l-.2-6v-.9s.1.4.4.5l.4-4.4c1.2-2.8 1.3-5.7 1.3-8.7 0-.7-.2-1.2-.2-1.2l-.2 1-.2-5.4-.5-.3c0-2.4-.8-5-2.6-6.2 0 0 .1-.3-.7-.7-.7-.3-4 0-4.3 0z" fill="#863b3b"/><path d="M340.4 68.9c-1.2-.2-2.1 1.3-3.4.6l-.3-.2-3 1.9-.7 2.5c.7 1.3.3 2-1.2 2v1.1c.6.5.6 1.2.5 2-1 1-.6 2.3-.7 3.4-.2 2-1 3.5-3 4.1 1.5 2.4 4.6 3.5 5.7 6.4l.7 1.8c1.3-1.5 1.9-3 1.1-5.1-.6-1.6.1-3 1.8-3.9.6 0 1.3-.3 1.7 0l.2-1.6c-1.1 0-1.2-.9-1.1-2-.4-.7-.4-1.3.6-1.3.5.3.8.8 1.2 1l.6-.3h-.2c-1-1.3-.8-2.8-.5-4 .6-2.8.5-5.6 0-8.4z"/></svg>
diff --git a/src/art/vector/layers/Art_Vector_Fox_Tail.svg b/src/art/vector/layers/Art_Vector_Fox_Tail.svg
index 829b5ca5f8a5d447e842dc9caa50b6df3bc21c45..5784a7136298f1c6092150cbe919e17ed7509dd4 100644
--- a/src/art/vector/layers/Art_Vector_Fox_Tail.svg
+++ b/src/art/vector/layers/Art_Vector_Fox_Tail.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1"><path d="M331.1 473.6c-3.7.8-4.6 2.4-2.6 5.2 2.5 1.7 4.1 4.1 6.2 6.1a32 32 0 017.1 9.2l.7 1c1.1 1.1 2.3 2.5 3.7 3.1v.2c2.2 8.5 8 17 9 24.8.7 2.6 1 5.4 2.5 7.7h1v.3c-1.6 1.7-.8 4.1-1.6 6 0 3.2-1.2 6.7.6 10l.4.3c-.7.8-.4 1.6 0 2.6l-1.3 2.3c0 2.3-.5 4.6-.5 7-.2 1.4-.4 2.7 0 4v.5c0 2.5.5 5 1 7.3-1 1.8.6 3.7-.4 5.7 2.5 4 1.2 8.7 2.5 13.1l8.5 31.8h.2a21.4 21.4 0 00.8 7.2c3.6 10.8 2.8 23 8.2 33.5 1.7 8.2 4.6 16.3 8.2 24l1.9 1.6a9.9 9.9 0 001.6 5c1.3 2.3 4.4 3.2 6.9 3.4 1 .8 2.3.8 2.6 4.1.4 3.3 3.3 4.6 7 7.7.6.4.4.7.4 1.2.2 5.2 3.3 8.4 7.6 10.7 1.5 2.6 4.2 4.9 6 4.9 1.7 2.1 4.3 2.1 6.3 3.1.5 3.3 1.6 2.8 2.1 3.8 1.2 2.3 4.3 3.3 6.6 4.7.3 2.8 3.3 2.2 4.6 3.8 2.5 1.3 4.6 3.3 7.7 2.5h.4c1.6 2.1 3.9 2.1 6.5 1.1v.5c.7 1.3 2 1.7 3.3 1.7 1 1.6 2.5 2 4.3 1.5 19.2-.9 37.8-22.7 36.6-40 .7-2.4-1.6-4-2-6l-1.6-2.3-1 .1-4.8-3.3c0-1.1 0-2.3-.6-3.2-1.5-1.5-1.2-4.3-3.5-5-.1-1.6-2-2.6-3.4-3.3-.3-1.4-1.5-2.8-.7-4.2l-.1-1.3c-2.3-2-4.6-6.6-5.5-7.1-1-1-2.4-1.8-.6-3 1.6-1.1-5.6-8.7-8.6-11 1.9-.1-.6-3.8-.6-5.2l-.7-1.7-1.8-1.6c-.8-1-.6-2.6-2.1-3.1l-1-1.5-.6-.8c-.5-1.5-.2-3.3-2-4.1-1.3-1.4 0-2.7 0-3.8-3.1-2.2-1.2-6.1-3.3-8.6l-.3-.8c-1.7-1.6-2-4.1-2.5-6.2l-.8-3c-.3-1.1-.2-2.3-.3-3.3 0-1.3-.4-2.6 0-3.8.3-1.3.3-2.4-.2-3.6v-.1c.3-.9.2-1.8 0-2.8l-1.7-5.6-1.3-6-1-.7c.4-5.3-3-10.6-3.6-15a9.4 9.4 0 00-2.8-5.6c-.6-7.2-10.8-34.5-15.6-34.5v-.5a8.2 8.2 0 00-.8-1.8c-3.3-5.6-7.5-10.5-10.2-16.4-.6-1.6-2.1-3.3-3.8-4.4a29 29 0 01-6.9-7.6c-10.3-13.5-12.6-8.9-15-13.5-3.4-4-11-8.2-12.6-8.5-3.7-.7-3-2.8-4.4-3.5-2.6-1.1-5-2.4-7.9-2.8-4.9-2-10.3-.6-15-2.4-5.3-.3-11-1.7-15.5-1.7z" fill="#863b3b"/><path d="M494 699.5l-.9.1c-1.1 2.2-3.4-.5-5 1.7 3.2 2 8 4 2.2 8.5 0 1.3-.5 1.7-1.6.7-1-.9-1.7-2.5-3.5-2.2l.7 2.7c0 .8-.5.3-.8.3-3.7 0-3.3 2.8-3.8 5 0 0-.3 0-.5-.2-4 2.2-4 2.2-2.6 4.4 1.3 2.4-.5 4-1.2 6l.2.9c-1.8.3-3.3.6-1.7 3.1 1.3 2.3-1.1 1-1.6 1.6v.5c-1.3.7-2.5-2-4-.5-.6 1-.3 1.9 0 2.8l-1 .4a5 5 0 002.9 3l2 1.2c.7 3.8-1.6 2.2-3.2 1.8l-2.1-1.3c-2.2 1-2.8 4.6-5.6 3.6-2.3-.6-3.1.7-4.3 1.9l-2 .6c1 1.7 2.7 2.1 4.5 1.7.3 3.9 4 1.4 5.6 3.2 1 .5 1.8.7 2.4.4.4.6 1.2.8 1.8 1 1.2 0 2.3-1.2 3.3-.9 0 1.2.7 2 1.7 2.8.8 1.2 4.4 2.7 5.5 1.3 1.7.5 3.2-.1 4.2-1.6.4 2.8 3.6 2.8 3.7 1.6 1 .7 2.2.5 3.3.4 1-.2 1.7-.7 2.2-1.5.4.8 1.6 0 1.8-.3 1 1.3 2.1 1.1 3 1.3l.6-.2.8.8c2.1.9 4.1 0 6-.6v.1c1.7 2.7 9.4.4 11.4-1 1-.8 2-1.8 2.1-3l1.2-.2c.7.6 1.6 1 2.3 1 4.1 0 6 .6 7.4-2.2 1.1-.3 1-.8.5-1.5.5-.1.8-.6 1-1.1 0-.7-.5-1.3-.2-2.1 1.2 0 2.3-.4 1.3-2.2-.6-1.6-3.3-2-4.4-3.3-1.8-1.6-2.2-4.6-3.8-6.4-1.3-1.3-3.3-1-4.6-2.1-1.8-1.5-2.1-7.2-5.3-6.6l-.3.2c0-1 0-2.2-.5-3.3-1.1-.3-2-.2-2.6.8-1-.1-3 1.5-2.1-1.5 0-1-.4-1.6-.9-2.4l-1.3-1.7c-1.6-.8-1.6-2.6-2-4-2 .4-4 1-4.4-1.7 1.5-1.5-3-3.5-4-3.5.6-2.4-1.7-4-2-6l-1.7-2.3z" fill="#eaeaea"/></svg>
\ No newline at end of file
+<svg viewBox="0 0 560 1000"><path d="M331.1 473.6c-3.7.8-4.6 2.4-2.6 5.2 2.5 1.7 4.1 4.1 6.2 6.1a32 32 0 017.1 9.2l.7 1c1.1 1.1 2.3 2.5 3.7 3.1v.2c2.2 8.5 8 17 9 24.8.7 2.6 1 5.4 2.5 7.7h1v.3c-1.6 1.7-.8 4.1-1.6 6 0 3.2-1.2 6.7.6 10l.4.3c-.7.8-.4 1.6 0 2.6l-1.3 2.3c0 2.3-.5 4.6-.5 7-.2 1.4-.4 2.7 0 4v.5c0 2.5.5 5 1 7.3-1 1.8.6 3.7-.4 5.7 2.5 4 1.2 8.7 2.5 13.1l8.5 31.8h.2a21.4 21.4 0 00.8 7.2c3.6 10.8 2.8 23 8.2 33.5 1.7 8.2 4.6 16.3 8.2 24l1.9 1.6a9.9 9.9 0 001.6 5c1.3 2.3 4.4 3.2 6.9 3.4 1 .8 2.3.8 2.6 4.1.4 3.3 3.3 4.6 7 7.7.6.4.4.7.4 1.2.2 5.2 3.3 8.4 7.6 10.7 1.5 2.6 4.2 4.9 6 4.9 1.7 2.1 4.3 2.1 6.3 3.1.5 3.3 1.6 2.8 2.1 3.8 1.2 2.3 4.3 3.3 6.6 4.7.3 2.8 3.3 2.2 4.6 3.8 2.5 1.3 4.6 3.3 7.7 2.5h.4c1.6 2.1 3.9 2.1 6.5 1.1v.5c.7 1.3 2 1.7 3.3 1.7 1 1.6 2.5 2 4.3 1.5 19.2-.9 37.8-22.7 36.6-40 .7-2.4-1.6-4-2-6l-1.6-2.3-1 .1-4.8-3.3c0-1.1 0-2.3-.6-3.2-1.5-1.5-1.2-4.3-3.5-5-.1-1.6-2-2.6-3.4-3.3-.3-1.4-1.5-2.8-.7-4.2l-.1-1.3c-2.3-2-4.6-6.6-5.5-7.1-1-1-2.4-1.8-.6-3 1.6-1.1-5.6-8.7-8.6-11 1.9-.1-.6-3.8-.6-5.2l-.7-1.7-1.8-1.6c-.8-1-.6-2.6-2.1-3.1l-1-1.5-.6-.8c-.5-1.5-.2-3.3-2-4.1-1.3-1.4 0-2.7 0-3.8-3.1-2.2-1.2-6.1-3.3-8.6l-.3-.8c-1.7-1.6-2-4.1-2.5-6.2l-.8-3c-.3-1.1-.2-2.3-.3-3.3 0-1.3-.4-2.6 0-3.8.3-1.3.3-2.4-.2-3.6v-.1c.3-.9.2-1.8 0-2.8l-1.7-5.6-1.3-6-1-.7c.4-5.3-3-10.6-3.6-15a9.4 9.4 0 00-2.8-5.6c-.6-7.2-10.8-34.5-15.6-34.5v-.5a8.2 8.2 0 00-.8-1.8c-3.3-5.6-7.5-10.5-10.2-16.4-.6-1.6-2.1-3.3-3.8-4.4a29 29 0 01-6.9-7.6c-10.3-13.5-12.6-8.9-15-13.5-3.4-4-11-8.2-12.6-8.5-3.7-.7-3-2.8-4.4-3.5-2.6-1.1-5-2.4-7.9-2.8-4.9-2-10.3-.6-15-2.4-5.3-.3-11-1.7-15.5-1.7z" fill="#863b3b"/><path d="M494 699.5l-.9.1c-1.1 2.2-3.4-.5-5 1.7 3.2 2 8 4 2.2 8.5 0 1.3-.5 1.7-1.6.7-1-.9-1.7-2.5-3.5-2.2l.7 2.7c0 .8-.5.3-.8.3-3.7 0-3.3 2.8-3.8 5 0 0-.3 0-.5-.2-4 2.2-4 2.2-2.6 4.4 1.3 2.4-.5 4-1.2 6l.2.9c-1.8.3-3.3.6-1.7 3.1 1.3 2.3-1.1 1-1.6 1.6v.5c-1.3.7-2.5-2-4-.5-.6 1-.3 1.9 0 2.8l-1 .4a5 5 0 002.9 3l2 1.2c.7 3.8-1.6 2.2-3.2 1.8l-2.1-1.3c-2.2 1-2.8 4.6-5.6 3.6-2.3-.6-3.1.7-4.3 1.9l-2 .6c1 1.7 2.7 2.1 4.5 1.7.3 3.9 4 1.4 5.6 3.2 1 .5 1.8.7 2.4.4.4.6 1.2.8 1.8 1 1.2 0 2.3-1.2 3.3-.9 0 1.2.7 2 1.7 2.8.8 1.2 4.4 2.7 5.5 1.3 1.7.5 3.2-.1 4.2-1.6.4 2.8 3.6 2.8 3.7 1.6 1 .7 2.2.5 3.3.4 1-.2 1.7-.7 2.2-1.5.4.8 1.6 0 1.8-.3 1 1.3 2.1 1.1 3 1.3l.6-.2.8.8c2.1.9 4.1 0 6-.6v.1c1.7 2.7 9.4.4 11.4-1 1-.8 2-1.8 2.1-3l1.2-.2c.7.6 1.6 1 2.3 1 4.1 0 6 .6 7.4-2.2 1.1-.3 1-.8.5-1.5.5-.1.8-.6 1-1.1 0-.7-.5-1.3-.2-2.1 1.2 0 2.3-.4 1.3-2.2-.6-1.6-3.3-2-4.4-3.3-1.8-1.6-2.2-4.6-3.8-6.4-1.3-1.3-3.3-1-4.6-2.1-1.8-1.5-2.1-7.2-5.3-6.6l-.3.2c0-1 0-2.2-.5-3.3-1.1-.3-2-.2-2.6.8-1-.1-3 1.5-2.1-1.5 0-1-.4-1.6-.9-2.4l-1.3-1.7c-1.6-.8-1.6-2.6-2-4-2 .4-4 1-4.4-1.7 1.5-1.5-3-3.5-4-3.5.6-2.4-1.7-4-2-6l-1.7-2.3z" fill="#eaeaea"/></svg>
diff --git a/src/events/intro/pcAppearance.js b/src/events/intro/pcAppearance.js
index 99dbf31f93e48b6d899fa8428abc7462a18d28f9..8eedb327acdc323eb60c5d9ba4ce27e493eae0d2 100644
--- a/src/events/intro/pcAppearance.js
+++ b/src/events/intro/pcAppearance.js
@@ -2,7 +2,7 @@ App.UI.Player = {};
 
 App.UI.Player.appearance = function(options) {
 	options.addOption("Your nationality is", "nationality", V.PC).showTextBox()
-		.addValueList(Object.keys(App.Data.SlaveSummary.short.nationality))
+		.addValueList(App.Data.misc.baseNationalities)
 		.addComment("For best result capitalize it.").pulldown();
 
 	options.addOption("Your race is", "race", V.PC).showTextBox()
diff --git a/src/facilities/salon/salonPassage.js b/src/facilities/salon/salonPassage.js
index b78f34aecd986a313a2b0b7ad571d04d2ef83311..20b0aab88504918ea0b801d8e069723acbcce54c 100644
--- a/src/facilities/salon/salonPassage.js
+++ b/src/facilities/salon/salonPassage.js
@@ -276,24 +276,22 @@ App.UI.salon = function(slave, cheat = false) {
 	function skin() {
 		const el = new DocumentFragment();
 		let r;
+		let option;
 		App.UI.DOM.appendNewElement("h3", el, "Skin");
 		const options = new App.UI.OptionsGroup();
 		let comment = [];
 
 		if (cheat) {
-			options.addOption(`${His} natural skin color is`, "origSkin", slave).showTextBox()
-				.addValueList([["Pure White", "pure white"], ["Ivory", "ivory"], ["White", "white"], ["Extremely Pale", "extremely pale"],
-					["Very Pale", "very pale"], ["Pale", "pale"], ["Extremely Fair", "extremely fair"], ["Very Fair", "very fair"],
-					["Fair", "fair"], ["Light", "light"], ["Light Olive", "light olive"], ["Tan", "tan"], ["Olive", "olive"], ["Bronze", "bronze"],
-					["Dark Olive", "dark olive"], ["Dark", "dark"], ["Light Beige", "light beige"], ["Beige", "beige"],
-					["Dark Beige", "dark beige"], ["Light Brown", "light brown"], ["Brown", "brown"], ["Dark Brown", "dark brown"],
-					["Black", "black"], ["Ebony", "ebony"], ["Pure Black", "pure black"]]).pulldown();
+			option = options.addOption(`${His} natural skin color is`, "origSkin", slave).showTextBox().pulldown();
+			for (const skin of App.Medicine.Modification.naturalSkins) {
+				option.addValue(capFirstChar(skin), skin, () => slave.skin = slave.origSkin);
+			}
 		}
 
-		let option = options.addOption(`${His} skin is ${slave.skin}.`, "skin", slave);
+		option = options.addOption(`${His} skin is ${slave.skin}.`, "skin", slave);
 		if (App.Medicine.Modification.dyedSkins.includes(slave.skin)) {
 			option.addValue("Remove coloring", slave.origSkin, billMod);
-		} else if (((slave.skin === "sun tanned") || (slave.skin === "spray tanned"))) {
+		} else if ((slave.skin === "sun tanned") || (slave.skin === "spray tanned")) {
 			option.addValue("Remove tanning", slave.origSkin, billMod);
 		}
 
diff --git a/src/gui/css/options.css b/src/gui/css/options.css
index 7ce9fb2705cc625456d3c1fb5e887d9fd6954241..d1d13a5cda81a249638223a767af91562035cbf8 100644
--- a/src/gui/css/options.css
+++ b/src/gui/css/options.css
@@ -4,12 +4,6 @@ div.options-group {
 	align-items: center;
 }
 
-@media only screen and (min-width: 1600px) {
-	div.options-group.double {
-		grid-template-columns: max-content auto max-content auto;
-    }
-}
-
 /* left side */
 div.options-group div.description {
 	margin-right: 10px;
@@ -77,18 +71,64 @@ div.options-group button.neutral:hover {
 div.options-group input {
 	border: 2px solid var(--button-border-color);
 	min-width: unset; /* remove SC styling */
-	width: 140px;
+	width: 12em;
+	/* move back so that the outline of a potential select overlaps in front */
+	position:relative;
+	z-index: 0;
+}
+
+.options-group input:hover, .options-group input:focus {
+	/* show highlighted border in front of neighbours */
+	z-index: 1
 }
 
 div.options-group input.number {
-	width: 50px;
+	width: 4em;
+}
+
+div.options-group input.full-width {
+	width: 100%;
+}
+
+/* custom row */
+.options-group .custom-row {
+	grid-column-start: span 2;
+	width: 70vw
+}
+
+.options-group select {
+	border: none; /* outline instead of border */
+	/* left & right outline overlap each other so we don't have a double border */
+	outline: solid 2px var(--button-border-color);
+	margin-left: 2px;
+	min-width: 12em;
+	/* move in front of a potential textbox, so the outline overlaps the border of the textbox */
+	position: relative;
+	z-index: 1;
+}
+
+.options-group select:hover {
+	outline: solid 2px #eee;
+}
+
+/* double column */
+@media only screen and (min-width: 1600px) {
+	.options-group.double {
+		grid-template-columns: max-content auto max-content auto;
+	}
+
+	.options-group.double .custom-row {
+		width: 35vw
+	}
 }
 
+/* other */
 .subHeading {
 	width: 85%;
 	text-align: center;
 	margin-top: 1.5em;
 }
+
 .scLink {
 	width: 85%;
 	text-align: center;
@@ -104,8 +144,3 @@ table.invisible {
     border-spacing: 5px;
     margin:1em auto;
 }
-
-/* custom row */
-.options-group .custom-row {
-	grid-column-start: span 2;
-}
diff --git a/src/gui/options/descriptionOptions.js b/src/gui/options/descriptionOptions.js
new file mode 100644
index 0000000000000000000000000000000000000000..6b4e0da08707ff4981c98a0cf8784a82d6660807
--- /dev/null
+++ b/src/gui/options/descriptionOptions.js
@@ -0,0 +1,70 @@
+App.UI.descriptionOptions = function() {
+	const f = document.createDocumentFragment();
+	App.UI.DOM.appendNewElement("h1", f, "Description Options");
+
+	App.UI.DOM.appendNewElement("p", f,
+		"These options will affect both the long form description of each slave and the miniscenes available from the main menu.",
+		"scene-intro");
+
+	const options = new App.UI.OptionsGroup();
+
+	options.addOption("", "surnameOrder")
+		.addValue("Allow nationality name order", 0).customDescription("Order names ''based on country of origin''.")
+		.addValue("Force name surname", 1).customDescription("Names will always be ''Name Surname''.")
+		.addValue("Force surname name", 2).customDescription("Names will always be ''Surname Name''.");
+
+	options.addOption("", "seeRace")
+		.addValue("Disable most mentions of race", 0).off()
+		.customDescription("Ethnicity will ''almost never'' be mentioned.")
+		.addValue("Enable mentions of race", 1).on().customDescription("Ethnicity will ''occasionally'' be mentioned.");
+
+	options.addOption("", "seeNationality")
+		.addValue("Disable most mentions of nationality", 0).off()
+		.customDescription("Nationality will ''almost never'' be mentioned.")
+		.addValue("Enable mentions of nationality", 1).on()
+		.customDescription("Nationality will ''occasionally'' be mentioned.");
+
+	options.addOption("The effects of implants are", "showImplantEffects")
+		.addValue("Shown", 1).on().addValue("Hidden", 0).off();
+
+	options.addOption("Clothing is mostly", "showClothing")
+		.addValue("Shown", 1).on().addValue("Hidden", 0).off();
+
+	options.addOption("Detailed slave age information is", "showAgeDetail")
+		.addValue("Shown", 1).on().addValue("Hidden", 0).off();
+
+	options.addOption("Approximate height is", "showHeightCMs")
+		.addValue("Shown", 1).on().addValue("Hidden", 0).off();
+
+	options.addOption("Cosmetic body mods are", "showBodyMods")
+		.addValue("Shown", 1).on().addValue("Hidden", 0).off();
+
+	options.addOption("Sexual histories are", "showSexualHistory")
+		.addValue("Shown", 1).on().addValue("Hidden", 0).off();
+
+	options.addOption("Attractiveness and Sexual scores are", "showScores")
+		.addValue("Shown", 1).on().addValue("Hidden", 0).off();
+
+	options.addOption("Volume, in CCs, of breasts is", "showBoobCCs")
+		.addValue("Shown", 1).on().addValue("Hidden", 0).off();
+
+	options.addOption("Height and length units are in", "showInches")
+		.addValueList([["Metric", 0], ["Both", 1], ["Imperial", 2]]);
+
+	if (V.seeDicks > 0) {
+		options.addOption("Approximate sizes of dicks and balls are", "showDickCMs")
+			.addValue("Shown", 1).on().addValue("Hidden", 0).off();
+	}
+
+	options.addOption("Numbers are displayed as", "showNumbers")
+		.addValueList([["Integers", 2], ["Both", 1], ["Words", 0]]);
+
+	if (V.showNumbers === 1) {
+		options.addOption("Only numbers up to $showNumbersMax are displayed as words", "showNumbersMax")
+			.addValue("Default (20)", 20).showTextBox();
+	}
+
+	App.UI.DOM.appendNewElement("p", f, options.render());
+
+	return f;
+};
diff --git a/src/gui/options/descriptionOptions.tw b/src/gui/options/descriptionOptions.tw
index b4b0c1a7075d5b046b65e1b92fdaf8ac4a4ede47..5ac19a8fb4a8d1706591ea51f229b194ec813c73 100644
--- a/src/gui/options/descriptionOptions.tw
+++ b/src/gui/options/descriptionOptions.tw
@@ -10,65 +10,4 @@
 <</if>>
 <<set $nextLink = $storedLink>>
 
-<h1>Description Options</h1>
-
-//These options will affect both the long form description of each slave and the miniscenes available from the main menu.//
-
-<<set _options = new App.UI.OptionsGroup()>>
-
-<<run _options.addOption("", "surnameOrder")
-.addValue("Allow nationality name order", 0).customDescription("Order names ''based on country of origin''.")
-.addValue("Force name surname", 1).customDescription("Names will always be ''Name Surname''.")
-.addValue("Force surname name", 2).customDescription("Names will always be ''Surname Name''.")>>
-
-<<run _options.addOption("", "seeRace")
-.addValue("Disable most mentions of race", 0).off().customDescription("Ethnicity will ''almost never'' be mentioned.")
-.addValue("Enable mentions of race", 1).on().customDescription("Ethnicity will ''occasionally'' be mentioned.")>>
-
-<<run _options.addOption("", "seeNationality")
-.addValue("Disable most mentions of nationality", 0).off().customDescription("Nationality will ''almost never'' be mentioned.")
-.addValue("Enable mentions of nationality", 1).on().customDescription("Nationality will ''occasionally'' be mentioned.")>>
-
-<<run _options.addOption("The effects of implants are", "showImplantEffects")
-.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
-
-<<run _options.addOption("Clothing is mostly", "showClothing")
-.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
-
-<<run _options.addOption("Detailed slave age information is", "showAgeDetail")
-.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
-
-<<run _options.addOption("Approximate height is", "showHeightCMs")
-.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
-
-<<run _options.addOption("Cosmetic body mods are", "showBodyMods")
-.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
-
-<<run _options.addOption("Sexual histories are", "showSexualHistory")
-.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
-
-<<run _options.addOption("Attractiveness and Sexual scores are", "showScores")
-.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
-
-<<run _options.addOption("Volume, in CCs, of breasts is", "showBoobCCs")
-.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
-
-<<run _options.addOption("Height and length units are in", "showInches")
-.addValueList([["Metric", 0], ["Both", 1], ["Imperial", 2]])>>
-
-
-<<if $seeDicks > 0>> <br>
-	<<run _options.addOption("Approximate sizes of dicks and balls are", "showDickCMs")
-	.addValue("Shown", 1).on().addValue("Hidden", 0).off()>>
-<</if>>
-
-
-<<run _options.addOption("Numbers are displayed as", "showNumbers")
-.addValueList([["Integers", 2], ["Both", 1], ["Words", 0]])>>
-
-<<if $showNumbers === 1>>
-	<<run _options.addOption("Only numbers up to $showNumbersMax are displayed as words", "showNumbersMax")
-	.addValue("Default (20)", 20).showTextBox()>>
-<</if>>
-
-<<includeDOM _options.render()>>
+<<includeDOM App.UI.descriptionOptions()>>
diff --git a/src/gui/options/options.js b/src/gui/options/options.js
index 12967cf2e552c9559016fb40caf4366002e479df..a6ffd81760751d90cabb3ebeff05929bc7c4e08f 100644
--- a/src/gui/options/options.js
+++ b/src/gui/options/options.js
@@ -2,9 +2,8 @@ App.UI.OptionsGroup = (function() {
 	class Row {
 		/**
 		 * @param {HTMLDivElement} container
-		 * @param {boolean} doubleColumn
 		 */
-		render(container, doubleColumn) {} // jshint ignore:line
+		render(container) {} // jshint ignore:line
 	}
 
 	/**
@@ -90,14 +89,13 @@ App.UI.OptionsGroup = (function() {
 		}
 
 		/**
-		 * @param {string} [unit]
+		 * @param {Object} [params]
+		 * @param {string} [params.unit]
+		 * @param {boolean} [params.large=false]
 		 * @returns {Option}
 		 */
-		showTextBox(unit) {
-			this.textbox = true;
-			if (unit) {
-				this.unit = unit;
-			}
+		showTextBox({unit, large = false} = {}) {
+			this.textbox = {unit: unit, large: large};
 			return this;
 		}
 
@@ -274,7 +272,6 @@ App.UI.OptionsGroup = (function() {
 			} else {
 				let matchFound = false;
 				let select = document.createElement("select");
-				select.classList.add("rajs-list");
 
 				for (const value of this.valuePairs) {
 					let el = document.createElement("option");
@@ -314,11 +311,15 @@ App.UI.OptionsGroup = (function() {
 				if (isNumber) {
 					textbox.classList.add("number");
 				}
+				if (this.textbox.large) {
+					textbox.classList.add("full-width");
+				}
 				buttonGroup.append(textbox);
-				if (this.unit) {
-					buttonGroup.append(" ", this.unit);
+				if (this.textbox.unit) {
+					buttonGroup.append(" ", this.textbox.unit);
 				}
 			}
+
 			if (this.comment) {
 				const comment = document.createElement("span");
 				comment.classList.add("comment");
@@ -378,16 +379,10 @@ App.UI.OptionsGroup = (function() {
 
 		/**
 		 * @param {HTMLDivElement} container
-		 * @param {boolean}doubleColumn
 		 */
-		render(container, doubleColumn) {
+		render(container) {
 			/** @type {HTMLDivElement} */
 			const div = App.UI.DOM.makeElement("div", this.element, "custom-row");
-			let factor = 0.7;
-			if (doubleColumn) {
-				factor *= 0.5;
-			}
-			div.style.width = `${Math.round(window.innerWidth * factor)}px`;
 			container.append(div);
 		}
 	}
diff --git a/src/npc/descriptions/descriptionWidgets.js b/src/npc/descriptions/descriptionWidgets.js
index ee287553a7c6622338eaec17783d83d11a55ad3a..fc40a143f5189de6e64078d7de6291a5de458fb3 100644
--- a/src/npc/descriptions/descriptionWidgets.js
+++ b/src/npc/descriptions/descriptionWidgets.js
@@ -1502,7 +1502,7 @@ App.Desc.geneticQuirkAssessment = function(slave) {
 		if (slave.geneticQuirks.uterineHypersensitivity === 2) {
 			r.push(`${He} possesses a rare genetic trait that causes uterine hypersensitivity;`);
 			if (slave.ovaries === 1 || slave.mpreg === 1) {
-				r.push(`pregnancy and birth will extremely pleasurable to ${him}.`);
+				r.push(`pregnancy and birth will be extremely pleasurable for ${him}.`);
 			} else {
 				r.push(`it has little effect on those unable to bear children.`);
 			}
diff --git a/src/npc/startingGirls/startingGirls.js b/src/npc/startingGirls/startingGirls.js
index 8a03b57faeb3de2c96e13845758dcdf4de0288b3..10c209d4dca62a800339ec28c6379b4630d5bce6 100644
--- a/src/npc/startingGirls/startingGirls.js
+++ b/src/npc/startingGirls/startingGirls.js
@@ -247,73 +247,6 @@ App.StartingGirls.uncommittedFamilyTree = function(slave) {
 	renderFamilyTree(tSlaves, slave.ID);
 };
 
-App.StartingGirls.career = function(slave) {
-	let el = new DocumentFragment();
-	let text;
-	let pullDown;
-
-	if (V.AgePenalty === 1) {
-		if (slave.actualAge < 16) {
-			text = "Very young careers: ";
-			pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.veryYoung));
-		} else if (slave.actualAge <= 24) {
-			text = "Young careers: ";
-			pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.young));
-		} else if (slave.intelligenceImplant >= 15) {
-			text = "Educated careers: ";
-			pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.educated));
-		} else {
-			text = "Uneducated careers: ";
-			pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.uneducated));
-		}
-	} else {
-		if (slave.actualAge < 16) {
-			text = "Very young careers: ";
-			pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.veryYoung));
-		} else if (slave.intelligenceImplant >= 15) {
-			text = "Educated careers: ";
-			pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.educated));
-		} else if (slave.actualAge <= 24) {
-			text = "Young careers: ";
-			pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.young));
-		} else {
-			text = "Uneducated careers: ";
-			pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.uneducated));
-		}
-	}
-	function render(options) {
-		let select = document.createElement("select");
-		select.classList.add("rajs-list");
-
-		for (const opt of options) {
-			let el = document.createElement("option");
-			el.textContent = capFirstChar(opt);
-			el.value = opt;
-			if (slave.career === opt) {
-				el.selected = true;
-			}
-			select.appendChild(el);
-		}
-		select.onchange = () => {
-			slave.career = select.options[select.selectedIndex].value;
-			jQuery("#career-textbox").empty().append(
-				App.UI.DOM.makeTextBox(
-					slave.career,
-					v => {
-						slave.career = v;
-					},
-					false,
-				)
-			);
-		};
-
-		return select;
-	}
-	el.append(text);
-	el.append(pullDown);
-	return el;
-};
-
 App.StartingGirls.applyPlayerOrigin = function(slave) {
 	switch (V.PC.career) {
 		case "wealth":
@@ -683,3 +616,736 @@ App.StartingGirls.applyPlayerOrigin = function(slave) {
 		}
 	}
 };
+
+App.StartingGirls.physical = function(slave) {
+	const el = new DocumentFragment();
+	const {he} = getPronouns(slave);
+	const options = new App.UI.OptionsGroup();
+	let option;
+
+	options.addOption("Condition", "condition", slave.health)
+		.addValueList([["Unhealthy", -40], ["Healthy", 0], ["Very healthy", 40], ["Extremely healthy", 80]]);
+
+	options.addOption(`Height: ${heightToEitherUnit(slave.height)}`, "height", slave).showTextBox({unit: "cm"})
+		.addRange(145, 150, "<", "Petite")
+		.addRange(155, 160, "<", "Short")
+		.addRange(165, 170, "<", "Average")
+		.addRange(180, 185, "<", "Tall")
+		.addRange(190, 185, ">=", "Very tall");
+	option = options.addOption(`Average height for a ${slave.actualAge} year old """is ${heightToEitherUnit(Math.round(Height.mean(slave)))}"""`)
+		.customButton(
+			"Make average",
+			() => resyncSlaveHight(slave),
+			""
+		);
+	if (V.cheatMode === 1) {
+		option.customButton(
+			"Make dwarf",
+			() => slave.height = Height.random(slave, {limitMult: [-4, -1], spread: 0.15}),
+			""
+		)
+			.customButton(
+				"Make giant",
+				() => slave.height = Height.random(slave, {limitMult: [3, 10], spread: 0.15}),
+				""
+			);
+	}
+
+	options.addOption("Weight", "weight", slave)
+		.addRange(-100, -95, "<", "Emaciated")
+		.addRange(-50, -30, "<", "Skinny")
+		.addRange(-20, -10, "<", "Thin")
+		.addRange(0, 10, "<", "Average")
+		.addRange(20, 30, "<", "Plush")
+		.addRange(50, 95, "<", "Chubby")
+		.addRange(100, 130, "<", "Fat")
+		.addRange(140, 160, "<", "Obese")
+		.addRange(180, 190, "<", "Super obese")
+		.addRange(200, 190, ">=", "Dangerously obese");
+
+	options.addOption("Muscles", "muscles", slave)
+		.addRange(-100, -96, "<", "Frail")
+		.addRange(-66, -51, "<", "Very weak")
+		.addRange(-41, -6, "<", "Weak")
+		.addRange(0, 5, "<", "Normal")
+		.addRange(20, 30, "<", "Toned")
+		.addRange(40, 50, "<", "Well built")
+		.addRange(65, 95, "<", "Quite muscular")
+		.addRange(100, 95, ">=", "Ripped");
+
+	options.addOption("Waist", "waist", slave)
+		.addRange(-100, -95, "<", "	Absurd")
+		.addRange(-55, -40, "<", "Hourglass")
+		.addRange(-25, -15, "<", "Feminine")
+		.addRange(0, 10, "<", "Average")
+		.addRange(15, 40, "<", "Unattractive")
+		.addRange(55, 95, "<", "Ugly")
+		.addRange(100, 10, ">=", "Masculine");
+
+	option = options.addOption("Facial appearance", "faceShape", slave)
+		.addValue("Normal", "normal");
+	if (V.seeDicks !== 0) {
+		option.addValue("Masculine", "masculine");
+	}
+	option.addValueList([["Androgynous", "androgynous"], ["Cute", "cute"], ["Sensual", "sensual"], ["Exotic", "exotic"]]);
+
+	options.addOption("Facial attractiveness", "face", slave)
+		.addRange(-100, -95, "<", "Very ugly")
+		.addRange(-55, -40, "<", "Ugly")
+		.addRange(-15, -10, "<", "Unattractive")
+		.addRange(0, 10, "<", "Average")
+		.addRange(15, 40, "<", "Attractive")
+		.addRange(55, 95, "<", "Beautiful")
+		.addRange(100, 95, ">=", "Very beautiful");
+
+	option = options.addOption("Lips", "lips", slave)
+		.addRange(5, 10, "<", "Thin")
+		.addRange(15, 20, "<", "Normal")
+		.addRange(25, 40, "<", "Pretty")
+		.addRange(55, 70, "<", "Plush");
+	if (V.seeExtreme === 1) {
+		option.addRange(85, 95, "<", "Huge")
+			.addRange(100, 95, ">=", "Facepussy");
+	} else {
+		option.addRange(85, 70, ">=", "Huge");
+	}
+
+	options.addOption("Voice", "voice", slave)
+		.addValueList([["Mute", 0], ["Deep", 1], ["Normal", 2], ["High", 3]]);
+
+	if (slave.voice !== 0) {
+		options.addOption(V.language, "accent", slave)
+			.addValueList([
+				["Unaccented", 0],
+				[`Pretty ${aNational(slave.nationality)} accent`, 1],
+				[`Thick ${aNational(slave.nationality)} accent`, 2],
+				["Not fluent", 3]
+			]);
+	}
+
+	option = options.addOption("Teeth", "teeth", slave)
+		.addValueList([
+			["Crooked", "crooked"],
+			["Gapped", "gapped"],
+			["Braces", "straightening braces"]
+		]);
+	if (slave.physicalAge >= 12) {
+		if (slave.teeth === "baby" || slave.teeth === "mixed") {
+			slave.teeth = "normal";
+		}
+		option.addValue("Straight", "normal");
+	} else if (slave.physicalAge >= 6) {
+		if (slave.teeth === "baby" || slave.teeth === "normal" || slave.teeth === "") {
+			slave.teeth = "mixed";
+		}
+		option.addValue("Mixed adult & child", "mixed");
+	} else {
+		if (slave.teeth === "mixed" || slave.teeth === "normal" || slave.teeth === "") {
+			slave.teeth = "mixed";
+		}
+		option.addValue("Baby", "baby");
+	}
+
+	options.addOption("Breasts", "boobs", slave).showTextBox({unit: "CCs"})
+		.addRange(200, 200, "<=", "Flat (AA-cup)")
+		.addRange(300, 300, "<=", "Small (A-cup)")
+		.addRange(400, 400, "<=", "Medium (B-cup)")
+		.addRange(500, 500, "<=", "Healthy (C-cup)")
+		.addRange(800, 800, "<=", "Large (DD-cup)")
+		.addRange(1200, 1200, "<=", "Very Large (G-cup)")
+		.addRange(2050, 2050, "<=", "Huge (K-cup)")
+		.addRange(3950, 3950, "<=", "Massive (Q-cup)")
+		.addRange(6000, 6000, "<=", "Monstrous")
+		.addRange(8000, 6000, ">", "Science Experiment");
+
+	options.addOption("Natural shape", "boobShape", slave)
+		.addValueList([
+			["Normal", "normal"],
+			["Perky", "perky"],
+			["Torpedo-shaped", "torpedo-shaped"],
+			["Wide-set", "wide-set"],
+			["Downward-facing", "downward-facing"],
+			["Saggy", "saggy"]
+		]);
+
+	options.addOption("Lactation", "lactation", slave)
+		.addValue("Artificial", 2, () => slave.lactationDuration = 2)
+		.addValue("Natural", 1, () => slave.lactationDuration = 2)
+		.addValue("None", 0);
+
+	options.addOption("Nipples", "nipples", slave)
+		.addValueList([["Tiny", "tiny"], ["Cute", "cute"], ["Puffy", "puffy"], ["Partially Inverted", "partially inverted"], ["Inverted", "inverted"], ["Huge", "huge"]]);
+
+	options.addOption("Areolae", "areolae", slave)
+		.addValueList([["Normal", 0], ["Large", 1], ["Wide", 2], ["Huge", 3], ["Massive", 4]]);
+
+	options.addOption("Shoulders", "shoulders", slave)
+		.addValueList([["Very narrow", -2], ["Narrow", -1], ["Feminine", 0], ["Broad", 1], ["Very broad", 2]]);
+
+	options.addOption("Hips", "hips", slave)
+		.addValueList([["Very narrow", -2], ["Narrow", -1], ["Normal", 0], ["Broad", 1], ["Very broad", 2]]);
+
+	options.addOption("Butt", "butt", slave)
+		.addValueList([["Flat", 0], ["Small", 1], ["Plump", 2], ["Big", 3], ["Huge", 4], ["Enormous", 5], ["Gigantic", 6], ["Massive", 7]]);
+
+	options.addOption("Anus", "anus", slave)
+		.addValueList([["Virgin", 0], ["Normal", 1], ["Veteran", 2], ["Gaping", 3]]);
+
+	if (slave.anus > 0) {
+		let comment;
+		if (slave.analArea <= slave.anus) {
+			comment = "Recently stretched to current size.";
+		} else if (slave.analArea - slave.anus === 1) {
+			comment = "Used to current size.";
+		} else {
+			comment = "Very broad.";
+		}
+		options.addOption("External anus appearance", "anus", slave)
+			.addValueList([
+				["Recently stretched", slave.analArea = slave.anus],
+				["Used to current size", slave.analArea = slave.anus+1],
+				["Very broad", slave.analArea = slave.anus+2],
+			]).addComment(comment);
+	}
+
+	options.addOption("Vagina", "vagina", slave)
+		.addValue("No vagina", -1, () => {
+			slave.preg = 0;
+			WombFlush(slave);
+			slave.belly = 0;
+			slave.bellyPreg = 0;
+			slave.pubertyXX = 0;
+			slave.pubertyAgeXX = V.fertilityAge;
+			slave.ovaries= 0;
+		})
+		.addValue("Virgin", 0, () => {
+			slave.preg = -1;
+			slave.belly = 0;
+			slave.bellyPreg = 0;
+			slave.ovaries = 1;
+		})
+		.addValue("Normal", 1, () => {
+			slave.preg = -1;
+			slave.belly = 0;
+			slave.bellyPreg = 0;
+			slave.ovaries = 1;
+		})
+		.addValue("Veteran", 2, () => {
+			slave.preg = -1;
+			slave.belly = 0;
+			slave.bellyPreg = 0;
+			slave.ovaries = 1;
+		})
+		.addValue("Gaping", 3, () => {
+			slave.preg = -1;
+			slave.belly = 0;
+			slave.bellyPreg = 0;
+			slave.ovaries = 1;
+		});
+
+	if (slave.vagina > -1) {
+		if (slave.dick === 0) {
+			options.addOption("Clit", "clit", slave)
+				.addValueList([["Normal", 0], ["Large", 1], ["Huge", 2]]);
+		}
+
+		options.addOption("Labia", "labia", slave)
+			.addValueList([["Normal", 0], ["Large", 1], ["Huge", 2], ["Huge Dangling", 3]]);
+
+		options.addOption("Vaginal wetness", "vaginaLube", slave)
+			.addValueList([["Dry", 0], ["Normal", 1], ["Excessive", 2]]);
+
+		if (V.seePreg !== 0) {
+			/* This is only shown if slave has vagina */
+			options.addOption("Puberty", "pubertyXX", slave)
+				.addValue("Prepubescent", 0, () => {
+					slave.pubertyAgeXX = V.fertilityAge;
+					slave.belly = 0;
+					slave.bellyPreg = 0;
+					WombFlush(slave);
+				}).addValue("Postpubescent", 1);
+
+			options.addOption("Age of puberty", "pubertyAgeXX", slave).showTextBox();
+
+			if (slave.pubertyXX === 1) {
+				option = options.addOption("Pregnancy", "preg", slave);
+				if (V.seeHyperPreg === 1 && V.cheatMode === 1) {
+					option.addValue("Bursting at the seams", 43, () => {
+						slave.pregType = 150;
+						slave.pregWeek = 43;
+						slave.pregKnown = 1;
+						slave.belly = 2700000;
+						slave.bellyPreg = 2700000;
+						slave.pubertyXX = 1;
+					});
+					if (slave.preg === 43) {
+						option.addComment("Extreme hyper pregnancy!");
+					}
+				}
+				option.addValue("Completely Filled", 42, () => {
+					slave.pregType = 8;
+					slave.pregWeek = 42;
+					slave.pregKnown = 1;
+					slave.belly = 120000;
+					slave.bellyPreg = 120000;
+					slave.pubertyXX = 1;
+				}).addValue("Ready to drop", 40, () => {
+					slave.pregType = 1;
+					slave.pregWeek = 40;
+					slave.pregKnown = 1;
+					slave.belly = 15000;
+					slave.bellyPreg = 15000;
+					slave.pubertyXX = 1;
+				}).addValue("Advanced", 34, () => {
+					slave.pregType = 1;
+					slave.pregWeek = 34;
+					slave.pregKnown = 1;
+					slave.belly = 10000;
+					slave.bellyPreg = 10000;
+					slave.pubertyXX = 1;
+				}).addValue("Showing", 27, () => {
+					slave.pregType = 1;
+					slave.pregWeek = 27;
+					slave.pregKnown = 1;
+					slave.belly = 5000;
+					slave.bellyPreg = 5000;
+					slave.pubertyXX = 1;
+				}).addValue("Early", 12, () => {
+					slave.pregType = 1;
+					slave.pregWeek = 12;
+					slave.pregKnown = 1;
+					slave.belly = 100;
+					slave.bellyPreg = 100;
+					slave.pubertyXX = 1;
+				}).addValue("None", 0, () => {
+					slave.pregType = 0;
+					slave.belly = 0;
+					slave.bellyPreg = 0;
+					slave.pregSource = 0;
+					slave.pregWeek = 0;
+					slave.pregKnown = 0;
+				}).addValue("Contraceptives", -1, () => {
+					slave.pregType = 0;
+					slave.belly = 0;
+					slave.bellyPreg = 0;
+					slave.pregSource = 0;
+					slave.pregWeek = 0;
+					slave.pregKnown = 0;
+				}).addValue("Barren", -2, () => {
+					slave.pregType = 0;
+					slave.belly = 0;
+					slave.bellyPreg = 0;
+					slave.pregSource = 0;
+					slave.pregWeek = 0;
+					slave.pregKnown = 0;
+				});
+				options.addOption("Births", "birthsTotal", slave.counter).showTextBox().addComment(`How many times ${he} has already given birth, not necessarily while owned by you.`);
+			}
+
+			if (V.PC.dick > 0 && slave.preg > 0) {
+				options.addOption("Father of child", "pregSource", slave)
+					.addValueList([["My child", -1], ["Not me", 0]]);
+			}
+		}
+	}
+
+	if (V.seeDicks !== 0 || V.makeDicks === 1) {
+		options.addOption("Penis", "dick", slave)
+			.addValue("None", 0, () => {
+				slave.balls = 0;
+				slave.pubertyXY = 0;
+				slave.pubertyAgeXY = V.potencyAge;
+			})
+			.addValue("Tiny", 1, () => slave.clit = 0)
+			.addValue("Small", 2, () => slave.clit = 0)
+			.addValue("Normal", 3, () => slave.clit = 0)
+			.addValue("Large", 4, () => slave.clit = 0)
+			.addValue("Massive", 5, () => slave.clit = 0);
+
+		if (slave.dick > 0) {
+			option = options.addOption("Foreskin", "foreskin", slave);
+			if (V.seeCircumcision === 1) {
+				option.addValue("Circumcised", 0);
+			} else if (slave.foreskin === 0) {
+				slave.foreskin = 3;
+			}
+			option.addValueList([["Tiny", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]]);
+		}
+
+		options.addOption("Testicles", "balls", slave)
+			.addValue("None", 0, () => {
+				slave.pubertyXY = 0;
+				slave.pubertyAgeXY = V.potencyAge;
+				slave.scrotum = 0;
+			}).addValueList([["Vestigial", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]]);
+
+		options.addOption("Age of Male Puberty", "pubertyAgeXY", slave).showTextBox();
+
+		if (slave.balls > 0) {
+			options.addOption("Ballsack", "scrotum", slave)
+				.addValueList([["None", 0], ["Tiny", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]]);
+
+			options.addOption("Male Puberty", "pubertyXY", slave)
+				.addValue("Prepubescent", 0, () => slave.pubertyAgeXY = V.potencyAge)
+				.addValue("Postpubescent", 1);
+		}
+	}
+
+	options.addOption("Prostate", "prostate", slave)
+		.addValueList([
+			["No prostate", 0],
+			["Has a prostate", 1]
+		]);
+
+	const optionLeft = options.addOption("Left eye", "vision", slave.eye.left);
+	const optionRight = options.addOption("Right eye", "vision", slave.eye.right);
+	optionLeft.addValueList([["Normal", 2], ["Nearsighted", 1]]);
+	optionRight.addValueList([["Normal", 2], ["Nearsighted", 1]]);
+	if (V.seeExtreme === 1) {
+		optionLeft.addValue("Blind", 0);
+		optionRight.addValue("Blind", 0);
+	} else {
+		if (slave.eye.left.vision === 0) {
+			slave.eye.left.vision = 2;
+		}
+		if (slave.eye.right.vision === 0) {
+			slave.eye.right.vision = 2;
+		}
+	}
+	option = options.addOption("Natural eye color", "origColor", slave.eye);
+	for (const color of App.Medicine.Modification.eyeColor.map(color => color.value)) {
+		option.addValue(capFirstChar(color), color);
+	}
+	option.pulldown();
+
+	option = options.addOption("Hearing", "hears", slave);
+	option.addValueList([["Normal", 0], ["Hard of hearing", -1]]);
+	if (V.seeExtreme === 1) {
+		option.addValue("Deaf", -2);
+	} else if (slave.hears === 0) {
+		slave.hears = 2;
+	}
+
+	if (V.seeExtreme === 1) {
+		options.addOption("Smell ability", "smells", slave)
+			.addValueList([["Normal", 0], ["None", -1]]);
+
+		options.addOption("Taste ability", "tastes", slave)
+			.addValueList([["Normal", 0], ["None", -1]]);
+
+		State.temporary.LA = hasLeftArm(slave);
+		options.addOption("Left arm", "LA", State.temporary)
+			.addValue("Healthy", true, () => slave.arm.left = new App.Entity.LimbState())
+			.addValue("Amputated", false, () => slave.arm.left = null);
+
+		State.temporary.RA = hasRightArm(slave);
+		options.addOption("Right arm", "RA", State.temporary)
+			.addValue("Healthy", true, () => slave.arm.right = new App.Entity.LimbState())
+			.addValue("Amputated", false, () => slave.arm.right = null);
+
+		State.temporary.LL = hasLeftLeg(slave);
+		options.addOption("Left leg", "LL", State.temporary)
+			.addValue("Healthy", true, () => slave.leg.left = new App.Entity.LimbState())
+			.addValue("Amputated", false, () => slave.leg.left = null);
+
+		State.temporary.RL = hasRightLeg(slave);
+		options.addOption("Right leg", "RL", State.temporary)
+			.addValue("Healthy", true, () => slave.leg.right = new App.Entity.LimbState())
+			.addValue("Amputated", false, () => slave.leg.right = null);
+	}
+
+	el.append(options.render());
+	return el;
+};
+
+App.StartingGirls.profile = function(slave) {
+	const el = new DocumentFragment();
+	let options = new App.UI.OptionsGroup();
+	let r;
+	let option;
+	const {His} = getPronouns(slave);
+
+	options.addOption("Birth name", "birthName", slave).showTextBox();
+	options.addOption("Slave name", "slaveName", slave).showTextBox();
+	options.addOption("Birth surname", "birthSurname", slave).showTextBox();
+	options.addOption("Slave surname", "slaveSurname", slave).showTextBox();
+
+	option = options.addOption("Career", "career", slave).showTextBox();
+	let careers;
+	let text;
+	if (V.AgePenalty === 1) {
+		if (slave.actualAge < 16) {
+			text = "Very young careers";
+			careers = App.Data.Careers.General.veryYoung;
+		} else if (slave.actualAge <= 24) {
+			text = "Young careers";
+			careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.young);
+		} else if (slave.intelligenceImplant >= 15) {
+			text = "Educated careers";
+			careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.educated);
+		} else {
+			text = "Uneducated careers";
+			careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.uneducated);
+		}
+	} else {
+		if (slave.actualAge < 16) {
+			text = "Very young careers";
+			careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.veryYoung);
+		} else if (slave.intelligenceImplant >= 15) {
+			text = "Educated careers";
+			careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.educated);
+		} else if (slave.actualAge <= 24) {
+			text = "Young careers";
+			careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.young);
+		} else {
+			text = "Uneducated careers";
+			careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.uneducated);
+		}
+	}
+	for (const career of careers) {
+		option.addValue(capFirstChar(career), career);
+	}
+	option.addComment(text).pulldown();
+
+	options.addOption("Legal status", "indenture", slave)
+		.addValue("Slave", -1, () => slave.indentureRestrictions = 0)
+		.addRange(52, 0, ">=", "Indentured Servant");
+	if (slave.indenture > -1) {
+		options.addOption("Remaining weeks", "indenture", slave).showTextBox();
+
+		options.addOption("Indenture restrictions", "indentureRestrictions", slave)
+			.addValueList([["None", 0], ["Protective", 1], ["Restrictive", 2]]);
+	}
+
+	options.addOption("Age", "actualAge", slave).showTextBox()
+		.customButton("Resync characteristics to age", () => resyncSlaveToAge(slave), "")
+		.customButton("Resync only height to age", () => slave.height = Height.random(slave), "")
+		.addComment("It is recommended to resync if you change age significantly");
+
+	options.addOption("Birth week", "birthWeek", slave).showTextBox();
+
+	options.addOption("Genes", "genes", slave)
+		.addValue("XX (Female)", "XX", () => {
+			slave.dick = 0;
+			slave.balls = 0;
+			slave.clit = 0;
+			slave.pubertyXY = 0;
+			slave.pubertyAgeXY = V.potencyAge;
+			slave.pubertyXX = (slave.pubertyAgeXX < slave.actualAge ? 1 : 0);
+			slave.vagina = Math.max(0, slave.vagina);
+			slave.boobs = Math.max(500, slave.boobs);
+			slave.balls = 0;
+			slave.scrotum = 0;
+			slave.prostate = 0;
+			slave.shoulders = either(-2, -1, 0);
+			slave.hips = either(-2, -1, 0);
+		}).addValue("XY (Male)", "XY", () => {
+			slave.dick = 3;
+			slave.vagina = -1;
+			WombFlush(slave);
+			slave.belly = 0;
+			slave.bellyPreg = 0;
+			slave.pubertyXY = (slave.pubertyAgeXY < slave.actualAge ? 1 : 0);
+			slave.pubertyXX = 0;
+			slave.pubertyAgeXX = V.fertilityAge;
+			slave.ovaries = 0;
+			slave.boobs = 0;
+			slave.balls = 3;
+			slave.scrotum = 3;
+			slave.prostate = 1;
+			slave.shoulders = either(0, 1, 2);
+			slave.hips = either(0, 1, 2);
+		});
+
+	option = options.addOption("Prestige", "prestige", slave)
+		.addValueList([["None", 0], ["Locally known", 1], ["Regionally famous", 2], ["World renowned", 3]]);
+	if (slave.prestige > 0) {
+		r = [];
+		r.push("Starting slaves incur an extreme cost penalty for prestige. This slave's");
+		if (slave.actualAge >= 25) {
+			if (slave.actualAge > 35) {
+				r.push(" advanced");
+			}
+			r.push(" age decreases the penalty.");
+		} else {
+			r.push(" young age requires paying the full penalty.");
+		}
+		option.addComment(`<span class=warning>${r.join(" ")}</span>`);
+	}
+
+	options.addOption(`${His} nationality is`, "nationality", slave).showTextBox()
+		.addValueList(App.Data.misc.baseNationalities)
+		.pulldown();
+
+
+	if (V.seeRace === 1) {
+		options.addOption(`${His} ethnicity is`, "race", slave).showTextBox().pulldown()
+			.addValueList([["White", "white"], ["Asian", "asian"], ["Latina", "latina"], ["Middle Eastern", "middle eastern"],
+				["Black", "black"], ["Semitic", "semitic"], ["Southern European", "southern european"], ["Indo-Aryan", "indo-aryan"],
+				["Amerindian", "amerindian"], ["Pacific Islander", "pacific islander"], ["Malay", "malay"], ["Mixed Race", "mixed race"]]);
+	}
+
+	el.append(options.render());
+	App.UI.DOM.appendNewElement("h3", el, "Optional customizations");
+	options = new App.UI.OptionsGroup();
+
+	options.addOption("Origin story", "origin", slave).showTextBox({large: true}).addComment("Use complete, capitalized and punctuated sentences.");
+
+	options.addOption("Origin override", "originOverride", V)
+		.addValue("Enable", 1).on()
+		.addValue("Disable", 0).off()
+		.addComment("Prevent Starting Girls from overwriting custom origin and tattoo with its defaults.");
+
+	if (slave.prestige) {
+		options.addOption("Prestige description", "prestigeDesc", V).showTextBox().addComment("Use complete, capitalized and punctuated sentences.");
+	}
+	options.addOption("Description", "desc", slave.custom).showTextBox().addComment("Use complete, capitalized and punctuated sentences.");
+	options.addOption("Label", "label", slave.custom).showTextBox().addComment("Use a short phrase");
+
+
+	el.append(options.render());
+	return el;
+};
+
+App.StartingGirls.mental = function(slave) {
+	const el = new DocumentFragment();
+	const options = new App.UI.OptionsGroup();
+	let option;
+	let r;
+
+	options.addOption("Intelligence", "intelligence", slave)
+		.addValueList([["Moronic", -100], ["Very stupid", -60], ["Stupid", -30], ["Average", 0], ["Smart", 30], ["Very smart", 60], ["Brilliant", 100]]);
+
+	options.addOption("Education", "intelligenceImplant", slave)
+		.addValueList([["Uneducated", 0], ["Educated", 15], ["Well educated", 30]]);
+
+	option = options.addOption("Devotion", "devotion", slave).showTextBox()
+		.addRange(-100, -95, "<", "Utterly hateful")
+		.addRange(-70, -50, "<", "Hateful")
+		.addRange(-35, -20, "<", "Resistant")
+		.addRange(0, 20, "<", "Ambivalent")
+		.addRange(35, 50, "<", "Accepting")
+		.addRange(70, 95, "<", "Devoted")
+		.addRange(100, 95, ">=", "Worshipful");
+	if (slave.devotion > 20) {
+		r = [];
+		r.push("Starting slaves incur");
+		if (slave.devotion > 50) {
+			r.push("severe cost penalty at very high");
+		} else {
+			r.push("an additional cost penalty at high");
+		}
+		r.push("levels of devotion. This slave's");
+		if (slave.actualAge >= 25) {
+			if (slave.actualAge > 35) {
+				r.push("advanced");
+			}
+			r.push("age decreases the penalty.");
+		} else {
+			r.push("young age requires paying the full penalty.");
+		}
+		option.addComment(`<span class=warning>${r.join(" ")}</span>`);
+	}
+
+	options.addOption("Trust", "trust", slave).showTextBox()
+		.addRange(-100, -95, "<", "Abjectly terrified")
+		.addRange(-70, -50, "<", "Terrified")
+		.addRange(-35, -20, "<", "Frightened")
+		.addRange(0, 20, "<", "Fearful")
+		.addRange(35, 50, "<", "Careful")
+		.addRange(70, 95, "<", "Trusting")
+		.addRange(100, 95, ">=", "Absolute trust");
+
+
+
+	if (slave.fetishKnown === 0) {
+		options.addOption("Fetish", "fetishKnown", slave)
+			.addValueList([["Unknown", 0], ["Known", 1]]);
+	} else {
+		option = options.addOption("Fetish", "fetish", slave)
+			.addValue("Unknown", "", () => {
+				slave.fetish = either("boobs", "buttslut", "cumslut", "dom", "humiliation", "masochist", "pregnancy", "sadist",
+					"submissive", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none");
+				slave.fetishKnown = 0;
+			}).addValueList([["None", "none"], ["Sub", "submissive"], ["Dom", "dom"], ["Cumslut", "cumslut"], ["Humiliation", "humiliation"],
+				["Buttslut", "buttslut"], ["Breasts", "boobs"], ["Pregnancy", "pregnancy"], ["Sadism", "sadist"], ["Masochism", "masochist"]]);
+		if (V.seeExtreme === 1) {
+			option.addValue("Mindbroken", "mindbroken", () => {
+				slave.fetishStrength = 10;
+				slave.sexualFlaw = "none";
+				slave.sexualQuirk = "none";
+				slave.behavioralFlaw = "none";
+				slave.behavioralQuirk = "none";
+			});
+		}
+
+		if (slave.fetish !== "none" && slave.fetish !== "mindbroken") {
+			options.addOption("Fetish strength", "fetishStrength", slave)
+				.addRange(15, 30, "<=", "Very Low")
+				.addRange(45, 60, "<=", "Low")
+				.addRange(75, 85, "<=", "Normal")
+				.addRange(90, 95, "<=", "High")
+				.addRange(100, 95, ">", "Extremely High");
+		}
+	}
+
+	options.addOption("Sexuality", "attrKnown", slave)
+		.addValue("Known", 1, () => {
+			slave.attrXX = random(0, 100);
+			slave.attrXY = random(0, 100);
+			slave.energy = random(1, 90);
+		}).on()
+		.addValue("Unknown", 0).off();
+	if (slave.attrKnown === 1) {
+		options.addOption("Attraction to men", "attrXY", slave)
+			.addRange(0, 5, "<=", "Disgusted").off()
+			.addRange(10, 15, "<=", "Turned off").off()
+			.addRange(25, 35, "<=", "Not attracted").off()
+			.addRange(50, 65, "<=", "Indifferent").neutral()
+			.addRange(75, 85, "<=", "Attracted").on()
+			.addRange(90, 95, "<=", "Aroused").on()
+			.addRange(100, 95, ">", "Passionate").on();
+		options.addOption("Attraction to women", "attrXX", slave)
+			.addRange(0, 5, "<=", "Disgusted").off()
+			.addRange(10, 15, "<=", "Turned off").off()
+			.addRange(25, 35, "<=", "Not attracted").off()
+			.addRange(50, 65, "<=", "Indifferent").neutral()
+			.addRange(75, 85, "<=", "Attracted").on()
+			.addRange(90, 95, "<=", "Aroused").on()
+			.addRange(100, 95, ">", "Passionate").on();
+
+		options.addOption("Sex drive", "energy", slave)
+			.addRange(5, 10, "<=", "Frigid").off()
+			.addRange(25, 40, "<=", "Poor").off()
+			.addRange(45, 60, "<=", "Average").neutral()
+			.addRange(65, 80, "<=", "Powerful").on()
+			.addRange(85, 99, "<=", "Sex addict").on()
+			.addRange(100, 99, ">", "Nympho").on();
+	}
+
+	if (slave.fetish !== "mindbroken") {
+		options.addOption("Behavioral Flaw", "behavioralFlaw", slave)
+			.addValueList([["None", "none"], ["Arrogant", "arrogant"], ["Bitchy", "bitchy"], ["Odd", "odd"], ["Hates Men", "hates men"],
+				["Hates Women", "hates women"], ["Anorexic", "anorexic"], ["Gluttonous", "gluttonous"], ["Devout", "devout"],
+				["Liberated", "liberated"]]);
+
+		options.addOption("Behavioral Quirk", "behavioralQuirk", slave)
+			.addValueList([["None", "none"], ["Confident", "confident"], ["Cutting", "cutting"], ["Funny", "funny"],
+				["Adores Men", "adores men"], ["Adores Women", "adores women"], ["Insecure", "insecure"], ["Fitness", "fitness"],
+				["Sinful", "sinful"], ["Advocate", "advocate"]]);
+
+		options.addOption("Sexual Flaw", "sexualFlaw", slave)
+			.addValueList([["None", "none"], ["Hates Oral", "hates oral"], ["Hates Anal", "hates anal"],
+				["Hates Penetration", "hates penetration"], ["Repressed", "repressed"], ["Shamefast", "shamefast"], ["Apathetic", "apathetic"],
+				["Crude", "crude"], ["Judgemental", "judgemental"], ["Sexually idealistic", "idealistic"]]);
+
+		options.addOption("Sexual Quirk", "sexualQuirk", slave)
+			.addValueList([["None", "none"], ["Oral", "gagfuck queen"], ["Anal", "painal queen"], ["Penetration", "strugglefuck queen"],
+				["Perverted", "perverted"], ["Tease", "tease"], ["Caring", "caring"], ["Unflinching", "unflinching"], ["Size queen", "size queen"],
+				["Romantic", "romantic"]]);
+	}
+
+	el.append(options.render());
+
+	return el;
+};
diff --git a/src/npc/startingGirls/startingGirls.tw b/src/npc/startingGirls/startingGirls.tw
index eb8a930e046c3575c14da7388c7e367ae4a7892d..6dc4e30a17bbc6c267dfbcebb163fd38ab8faefa 100644
--- a/src/npc/startingGirls/startingGirls.tw
+++ b/src/npc/startingGirls/startingGirls.tw
@@ -200,14 +200,13 @@
 <h2>You are customizing this slave:</h2> <<includeDOM App.Desc.longSlave(V.activeSlave, {market: "generic"})>>
 
 <div class="tab-bar">
-	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Overview')" id="tab Overview">Overview</button>
+	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'profile')" id="tab profile">Profile</button>
 	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Physical')" id="tab Physical">Physical</button>
 	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Mental')" id="tab Mental">Mental</button>
 	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Skills')" id="tab Skills">Skills</button>
 	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Family', App.StartingGirls.uncommittedFamilyTree(V.activeSlave))" id="tab Family">Family</button>
 	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'body-mods')" id="tab body-mods">Body Mods</button>
 	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'salon')" id="tab salon">Salon</button>
-	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Customization')" id="tab Customization">Customization</button>
 	<<if $cash >= _slaveCost>>
 		<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'assignRemove')" id="tab assignRemove">Finalize</button>
 	<<else>>
@@ -217,627 +216,21 @@
 
 <<run App.Utils.setLocalPronouns($activeSlave)>>
 
-<div id="Overview" class="tab-content">
+<div id="profile" class="tab-content">
 	<div class="content">
-
-	<<set _options = new App.UI.OptionsGroup()>>
-
-	<<set _option = _options.addOption("Devotion", "devotion", $activeSlave).showTextBox()
-	.addRange(-100, -95, "<", "Utterly hateful")
-	.addRange(-70, -50, "<", "Hateful")
-	.addRange(-35, -20, "<", "Resistant")
-	.addRange(0, 20, "<", "Ambivalent")
-	.addRange(35, 50, "<", "Accepting")
-	.addRange(70, 95, "<", "Devoted")
-	.addRange(100, 95, ">=", "Worshipful")>>
-	<<if $activeSlave.devotion > 20>>
-		<<set _comment = "Starting slaves incur">>
-		<<if $activeSlave.devotion > 50>>
-			<<run _comment += " severe cost penalty at very high">>
-		<<else>>
-			<<run _comment += " an additional cost penalty at high">>
-		<</if>>
-		<<run _comment += " levels of devotion. This slave's">>
-		<<if $activeSlave.actualAge >= 25>>
-			<<if $activeSlave.actualAge > 35>>advanced	<</if>>
-			<<run _comment += " age decreases the penalty.">>
-		<<else>>
-			<<run _comment += " young age requires paying the full penalty.">>
-		<</if>>
-		<<run _option.addComment(`<span class=warning>${_comment}</span>`)>>
-	<</if>>
-
-	<<run _options.addOption("Trust", "trust", $activeSlave).showTextBox()
-	.addRange(-100, -95, "<", "Abjectly terrified")
-	.addRange(-70, -50, "<", "Terrified")
-	.addRange(-35, -20, "<", "Frightened")
-	.addRange(0, 20, "<", "Fearful")
-	.addRange(35, 50, "<", "Careful")
-	.addRange(70, 95, "<", "Trusting")
-	.addRange(100, 95, ">=", "Absolute trust")>>
-
-	<<run _options.addOption("Legal status", "indenture", $activeSlave)
-	.addValue("Slave", -1, () => V.activeSlave.indentureRestrictions = 0)
-	.addRange(52, 0, ">=", "Indentured Servant")>>
-	<<if $activeSlave.indenture > -1>>
-		<<run _options.addOption("Remaining weeks", "indenture", $activeSlave).showTextBox()>>
-
-		<<run _options.addOption("Indenture restrictions", "indentureRestrictions", $activeSlave)
-		.addValueList([["None", 0], ["Protective", 1], ["Restrictive", 2]])>>
-	<</if>>
-
-	<<run _options.addOption("Age", "actualAge", $activeSlave).showTextBox()
-	.customButton("Resync characteristics to age", () => resyncSlaveToAge(V.activeSlave))
-	.customButton("Resync only height to age", () => V.activeSlave.height = Height.random(V.activeSlave))
-	.addComment("It is recommended to resync if you change age significantly")>>
-
-	<<run _options.addOption("Birth week", "birthWeek", $activeSlave).showTextBox()>>
-
-	<<run _options.addOption("Genes", "genes", $activeSlave)
-	.addValue("XX (Female)", "XX", () => {
-		V.activeSlave.dick = 0;
-		V.activeSlave.balls = 0;
-		V.activeSlave.clit = 0;
-		V.activeSlave.pubertyXY = 0;
-		V.activeSlave.pubertyAgeXY = V.potencyAge;
-		V.activeSlave.pubertyXX = (V.activeSlave.pubertyAgeXX < V.activeSlave.actualAge ? 1 : 0);
-		V.activeSlave.vagina = Math.max(0, V.activeSlave.vagina);
-		V.activeSlave.boobs = Math.max(500, V.activeSlave.boobs);
-		V.activeSlave.balls = 0;
-		V.activeSlave.scrotum = 0;
-		V.activeSlave.prostate = 0;
-		V.activeSlave.shoulders = either(-2,-1,0);
-		V.activeSlave.hips = either(-2,-1,0);
-	}).addValue("XY (Male)", "XY", () => {
-		V.activeSlave.dick = 3;
-		V.activeSlave.vagina = -1;
-		WombFlush(V.activeSlave);
-		V.activeSlave.belly = 0;
-		V.activeSlave.bellyPreg = 0;
-		V.activeSlave.pubertyXY = (V.activeSlave.pubertyAgeXY < V.activeSlave.actualAge ? 1 : 0);
-		V.activeSlave.pubertyXX = 0;
-		V.activeSlave.pubertyAgeXX = V.fertilityAge;
-		V.activeSlave.ovaries = 0;
-		V.activeSlave.boobs = 0;
-		V.activeSlave.balls = 3;
-		V.activeSlave.scrotum = 3;
-		V.activeSlave.prostate = 1;
-		V.activeSlave.shoulders = either(0,1,2);
-		V.activeSlave.hips = either(0,1,2);
-	})>>
-
-	<<run _options.addOption("Condition", "condition", $activeSlave.health)
-	.addValueList([["Unhealthy", -40], ["Healthy", 0], ["Very healthy", 40], ["Extremely healthy", 80]])>>
-
-	<<set _option = _options.addOption("Prestige", "prestige", $activeSlave)
-	.addValueList([["None", 0], ["Locally known", 1], ["Regionally famous", 2], ["World renowned", 3]])>>
-	<<if $activeSlave.prestige > 0>>
-		<<set _comment = "Starting slaves incur an extreme cost penalty for prestige. This slave's">>
-		<<if $activeSlave.actualAge >= 25>>
-			<<if $activeSlave.actualAge > 35>>
-				<<set _comment += " advanced">>
-			<</if>>
-			<<set _comment += " age decreases the penalty.">>
-		<<else>>
-			<<set _comment += " young age requires paying the full penalty.">>
-		<</if>>
-		<<run _option.addComment(`<span class=warning>${_comment}</span>`)>>
-	<</if>>
-
-	<<run _options.addOption("$His nationality is", "nationality", $activeSlave).showTextBox()
-	.addValueList(Object.keys(App.Data.SlaveSummary.short.nationality))
-	.pulldown()
-	>>
-
-	<<if $seeRace == 1>>
-		<<run _options.addOption("$His ethnicity is", "race", $activeSlave).showTextBox()
-		.addValueList([["White", "white"], ["Asian", "asian"], ["Latina", "latina"], ["Middle Eastern", "middle eastern"],
-			["Black", "black"], ["Semitic", "semitic"], ["Southern European", "southern european"], ["Indo-Aryan", "indo-aryan"],
-			["Amerindian", "amerindian"], ["Pacific Islander", "pacific islander"], ["Malay", "malay"], ["Mixed Race", "mixed race"]])>>
-	<</if>>
-
-	<<run _options.addOption("Intelligence", "intelligence", $activeSlave)
-	.addValueList([["Moronic", -100], ["Very stupid", -60], ["Stupid", -30], ["Average", 0], ["Smart", 30], ["Very smart", 60], ["Brilliant", 100]])>>
-
-	<<run _options.addOption("Education", "intelligenceImplant", $activeSlave)
-	.addValueList([["Uneducated", 0], ["Educated", 15], ["Well educated", 30]])>>
-
-	<<includeDOM _options.render()>>
+		<<includeDOM App.StartingGirls.profile($activeSlave)>>
 	</div>
 </div>
 
 <div id="Physical" class="tab-content">
 	<div class="content">
-
-	<<set _options = new App.UI.OptionsGroup()>>
-
-	<<run _options.addOption(`Height: ${heightToEitherUnit($activeSlave.height)}`, "height", $activeSlave).showTextBox("cm")
-	.addRange(145, 150, "<", "Petite")
-	.addRange(155, 160, "<", "Short")
-	.addRange(165, 170, "<", "Average")
-	.addRange(180, 185, "<", "Tall")
-	.addRange(190, 185, ">=", "Very tall")>>
-	<<set _option = _options.addOption(`Average height for a ${$activeSlave.actualAge} year old """is ${heightToEitherUnit(Math.round(Height.mean(V.activeSlave)))}"""`)
-	.customButton("Make average", () => resyncSlaveHight($activeSlave))>>
-	<<if $cheatMode === 1>>
-		<<run _option.customButton("Make dwarf", () => V.activeSlave.height = Height.random(V.activeSlave, {limitMult:	[-4, -1], spread: 0.15}))
-		.customButton("Make giant", () => V.activeSlave.height = Height.random(V.activeSlave, {limitMult:	[3, 10], spread: 0.15}))>>
-	<</if>>
-
-	<<run _options.addOption("Weight", "weight", $activeSlave)
-	.addRange(-100, -95, "<", "Emaciated")
-	.addRange(-50, -30, "<", "Skinny")
-	.addRange(-20, -10, "<", "Thin")
-	.addRange(0, 10, "<", "Average")
-	.addRange(20, 30, "<", "Plush")
-	.addRange(50, 95, "<", "Chubby")
-	.addRange(100, 130, "<", "Fat")
-	.addRange(140, 160, "<", "Obese")
-	.addRange(180, 190, "<", "Super obese")
-	.addRange(200, 190, ">=", "Dangerously obese")>>
-
-	<<run _options.addOption("Muscles", "muscles", $activeSlave)
-	.addRange(-100, -96, "<", "Frail")
-	.addRange(-66, -51, "<", "Very weak")
-	.addRange(-41, -6, "<", "Weak")
-	.addRange(0, 5, "<", "Normal")
-	.addRange(20, 30, "<", "Toned")
-	.addRange(40, 50, "<", "Well built")
-	.addRange(65, 95, "<", "Quite muscular")
-	.addRange(100, 95, ">=", "Ripped")>>
-
-	<<run _options.addOption("Waist", "waist", $activeSlave)
-	.addRange(-100, -95, "<", "	Absurd")
-	.addRange(-55, -40, "<", "Hourglass")
-	.addRange(-25, -15, "<", "Feminine")
-	.addRange(0, 10, "<", "Average")
-	.addRange(15, 40, "<", "Unattractive")
-	.addRange(55, 95, "<", "Ugly")
-	.addRange(100, 10, ">=", "Masculine")>>
-
-	<<set _option = _options.addOption("Facial appearance", "faceShape", $activeSlave)
-	.addValue("Normal", "normal")>>
-	<<if $seeDicks !== 0>>
-		<<run _option.addValue("Masculine", "masculine")>>
-	<</if>>
-	<<run _option.addValueList([["Androgynous", "androgynous"], ["Cute", "cute"], ["Sensual", "sensual"], ["Exotic", "exotic"]])>>
-
-	<<run _options.addOption("Facial attractiveness", "face", $activeSlave)
-	.addRange(-100, -95, "<", "Very ugly")
-	.addRange(-55, -40, "<", "Ugly")
-	.addRange(-15, -10, "<", "Unattractive")
-	.addRange(0, 10, "<", "Average")
-	.addRange(15, 40, "<", "Attractive")
-	.addRange(55, 95, "<", "Beautiful")
-	.addRange(100, 95, ">=", "Very beautiful")>>
-
-	<<set _option = _options.addOption("Lips", "lips", $activeSlave)
-	.addRange(5, 10, "<", "Thin")
-	.addRange(15, 20, "<", "Normal")
-	.addRange(25, 40, "<", "Pretty")
-	.addRange(55, 70, "<", "Plush")>>
-	<<if $seeExtreme == 1>>
-		<<run _option.addRange(85, 95, "<", "Huge")
-			.addRange(100, 95, ">=", "Facepussy")>>
-	<<else>>
-		<<run _option.addRange(85, 70, ">=", "Huge")>>
-	<</if>>
-
-	<<run _options.addOption("Voice", "voice", $activeSlave)
-	.addValueList([["Mute", 0], ["Deep", 1], ["Normal", 2], ["High", 3]])>>
-
-	<<if $activeSlave.voice !== 0>>
-		<<run _options.addOption("$language", "accent", $activeSlave)
-		.addValueList([["Unaccented", 0], [`Pretty ${aNational($activeSlave.nationality)} accent`, 1],
-		[`Thick ${aNational($activeSlave.nationality)} accent`, 2], ["Not fluent", 3]])>>
-	<</if>>
-
-	<<set _option = _options.addOption("Teeth", "teeth", $activeSlave)
-	.addValueList([["Crooked", "crooked"], ["Gapped", "gapped"], ["Braces", "straightening braces"]])>>
-	<<if $activeSlave.physicalAge >= 12>>
-		<<if $activeSlave.teeth == "baby" || $activeSlave.teeth == "mixed">>
-			<<set $activeSlave.teeth = "normal">>
-		<</if>>
-		<<run _option.addValue("Straight", "normal")>>
-	<<elseif $activeSlave.physicalAge >= 6>>
-		<<if $activeSlave.teeth == "baby" || $activeSlave.teeth == "normal" || $activeSlave.teeth == "">>
-			<<set $activeSlave.teeth = "mixed">>
-		<</if>>
-		<<run _option.addValue("Mixed adult & child", "mixed")>>
-	<<else>>
-		<<if $activeSlave.teeth == "mixed" || $activeSlave.teeth == "normal" || $activeSlave.teeth == "">>
-			<<set $activeSlave.teeth = "mixed">>
-		<</if>>
-		<<run _option.addValue("Baby", "baby")>>
-	<</if>>
-
-	<<run _options.addOption("Breasts", "boobs", $activeSlave).showTextBox("CCs")
-	.addRange(200, 200, "<=", "Flat (AA-cup)")
-	.addRange(300, 300, "<=", "Small (A-cup)")
-	.addRange(400, 400, "<=", "Medium (B-cup)")
-	.addRange(500, 500, "<=", "Healthy (C-cup)")
-	.addRange(800, 800, "<=", "Large (DD-cup)")
-	.addRange(1200, 1200, "<=", "Very Large (G-cup)")
-	.addRange(2050, 2050, "<=", "Huge (K-cup)")
-	.addRange(3950, 3950, "<=", "Massive (Q-cup)")
-	.addRange(6000, 6000, "<=", "Monstrous")
-	.addRange(8000, 6000, ">", "Science Experiment")>>
-
-	<<run _options.addOption("Natural shape", "boobShape", $activeSlave)
-	.addValueList([
-		["Normal", "normal"],
-		["Perky", "perky"],
-		["Torpedo-shaped", "torpedo-shaped"],
-		["Wide-set", "wide-set"],
-		["Downward-facing", "downward-facing"],
-		["Saggy", "saggy"]
-	])>>
-
-	<<run _options.addOption("Lactation", "lactation", $activeSlave)
-	.addValue("Artificial", 2, () => V.activeSlave.lactationDuration = 2)
-	.addValue("Natural", 1, () => V.activeSlave.lactationDuration = 2)
-	.addValue("None", 0)>>
-
-	<<run _options.addOption("Nipples", "nipples", $activeSlave)
-	.addValueList([["Tiny", "tiny"], ["Cute", "cute"], ["Puffy", "puffy"], ["Partially Inverted", "partially inverted"], ["Inverted", "inverted"], ["Huge", "huge"]])>>
-
-	<<run _options.addOption("Areolae", "areolae", $activeSlave)
-	.addValueList([["Normal", 0], ["Large", 1], ["Wide", 2], ["Huge", 3], ["Massive", 4]])>>
-
-	<<run _options.addOption("Shoulders", "shoulders", $activeSlave)
-	.addValueList([["Very narrow", -2], ["Narrow", -1], ["Feminine", 0], ["Broad", 1], ["Very broad", 2]])>>
-
-	<<run _options.addOption("Hips", "hips", $activeSlave)
-	.addValueList([["Very narrow", -2], ["Narrow", -1], ["Normal", 0], ["Broad", 1], ["Very broad", 2]])>>
-
-	<<run _options.addOption("Butt", "butt", $activeSlave)
-	.addValueList([["Flat", 0], ["Small", 1], ["Plump", 2], ["Big", 3], ["Huge", 4], ["Enormous", 5], ["Gigantic", 6], ["Massive", 7]])>>
-
-	<<run _options.addOption("Anus", "anus", $activeSlave)
-	.addValueList([["Virgin", 0], ["Normal", 1], ["Veteran", 2], ["Gaping", 3]])>>
-
-	<<if $activeSlave.anus > 0>>
-		<<if $activeSlave.analArea <= $activeSlave.anus>>
-			<<set _comment = "Recently stretched to current size.">>"
-		<<elseif $activeSlave.analArea - $activeSlave.anus == 1>>
-			<<set _comment = "Used to current size."">>
-		<<else>>
-			<<set _comment = "Very broad."">>
-		<</if>>
-		<<run _options.addOption("External anus appearance", "anus", $activeSlave)
-		.addValueList([
-			["Recently stretched", $activeSlave.analArea = $activeSlave.anus],
-			["Used to current size", $activeSlave.analArea = $activeSlave.anus+1],
-			["Very broad", $activeSlave.analArea = $activeSlave.anus+2],
-		]).addComment(_comment)>>
-	<</if>>
-
-	<<run _options.addOption("Vagina", "vagina", $activeSlave)
-	.addValue("No vagina", -1, () => {
-		V.activeSlave.preg = 0;
-		WombFlush(V.activeSlave);
-		V.activeSlave.belly = 0;
-		V.activeSlave.bellyPreg = 0;
-		V.activeSlave.pubertyXX = 0;
-		V.activeSlave.pubertyAgeXX = V.fertilityAge;
-		V.activeSlave.ovaries = 0;
-	}).addValue("Virgin", 0, () => {
-		V.activeSlave.preg = -1;
-		V.activeSlave.belly = 0;
-		V.activeSlave.bellyPreg = 0;
-		V.activeSlave.ovaries = 1
-	}).addValue("Normal", 1, () => {
-		V.activeSlave.preg = -1;
-		V.activeSlave.belly = 0;
-		V.activeSlave.bellyPreg = 0;
-		V.activeSlave.ovaries = 1
-	}).addValue("Veteran", 2, () => {
-		V.activeSlave.preg = -1;
-		V.activeSlave.belly = 0;
-		V.activeSlave.bellyPreg = 0;
-		V.activeSlave.ovaries = 1
-	}).addValue("Gaping", 3, () => {
-		V.activeSlave.preg = -1;
-		V.activeSlave.belly = 0;
-		V.activeSlave.bellyPreg = 0;
-		V.activeSlave.ovaries = 1
-	})>>
-
-	<<if $activeSlave.vagina > -1>>
-		<<if $activeSlave.dick === 0>>
-			<<run _options.addOption("Clit", "clit", $activeSlave)
-			.addValueList([["Normal", 0], ["Large", 1], ["Huge", 2]])>>
-		<</if>>
-
-		<<run _options.addOption("Labia", "labia", $activeSlave)
-		.addValueList([["Normal", 0], ["Large", 1], ["Huge", 2], ["Huge Dangling", 3]])>>
-
-		<<run _options.addOption("Vaginal wetness", "vaginaLube", $activeSlave)
-		.addValueList([["Dry", 0], ["Normal", 1], ["Excessive", 2]])>>
-
-		<<if $seePreg !== 0>>
-			/* This is only shown if slave has vagina */
-			<<run _options.addOption("Puberty", "pubertyXX", $activeSlave)
-			.addValue("Prepubescent", 0, () => {
-				V.activeSlave.pubertyAgeXX = V.fertilityAge;
-				V.activeSlave.belly = 0;
-				V.activeSlave.bellyPreg = 0;
-				WombFlush(V.activeSlave)
-			}).addValue("Postpubescent", 1)>>
-
-			<<run _options.addOption("Age of puberty", "pubertyAgeXX", $activeSlave).showTextBox()>>
-
-			<<if $activeSlave.pubertyXX === 1>>
-				<<set _option = _options.addOption("Pregnancy", "preg", $activeSlave)>>
-				<<if $seeHyperPreg === 1 && $cheatMode === 1>>
-					<<run _option.addValue("Bursting at the seams", 43, () => {
-						V.activeSlave.pregType = 150;
-						V.activeSlave.pregWeek = 43;
-						V.activeSlave.pregKnown = 1;
-						V.activeSlave.belly = 2700000;
-						V.activeSlave.bellyPreg = 2700000;
-						V.activeSlave.pubertyXX = 1;
-					})>>
-					<<if $activeSlave.preg === 43>>
-						<<run _option.addComment("Extreme hyper pregnancy!")>>
-					<</if>>
-				<</if>>
-				<<run _option.addValue("Completely Filled", 42, () => {
-					V.activeSlave.pregType = 8;
-					V.activeSlave.pregWeek = 42;
-					V.activeSlave.pregKnown = 1;
-					V.activeSlave.belly = 120000;
-					V.activeSlave.bellyPreg = 120000;
-					V.activeSlave.pubertyXX = 1;
-				}).addValue("Ready to drop", 40, () => {
-					V.activeSlave.pregType = 1;
-					V.activeSlave.pregWeek = 40;
-					V.activeSlave.pregKnown = 1;
-					V.activeSlave.belly = 15000;
-					V.activeSlave.bellyPreg = 15000;
-					V.activeSlave.pubertyXX = 1;
-				}).addValue("Advanced", 34, () => {
-					V.activeSlave.pregType = 1;
-					V.activeSlave.pregWeek = 34;
-					V.activeSlave.pregKnown = 1;
-					V.activeSlave.belly = 10000;
-					V.activeSlave.bellyPreg = 10000;
-					V.activeSlave.pubertyXX = 1;
-				}).addValue("Showing", 27, () => {
-					V.activeSlave.pregType = 1;
-					V.activeSlave.pregWeek = 27;
-					V.activeSlave.pregKnown = 1;
-					V.activeSlave.belly = 5000;
-					V.activeSlave.bellyPreg = 5000;
-					V.activeSlave.pubertyXX = 1;
-				}).addValue("Early", 12, () => {
-					V.activeSlave.pregType = 1;
-					V.activeSlave.pregWeek = 12;
-					V.activeSlave.pregKnown = 1;
-					V.activeSlave.belly = 100;
-					V.activeSlave.bellyPreg = 100;
-					V.activeSlave.pubertyXX = 1;
-				}).addValue("None", 0, () => {
-					V.activeSlave.pregType = 0;
-					V.activeSlave.belly = 0;
-					V.activeSlave.bellyPreg = 0;
-					V.activeSlave.pregSource = 0;
-					V.activeSlave.pregWeek = 0;
-					V.activeSlave.pregKnown = 0;
-				}).addValue("Contraceptives", -1, () => {
-					V.activeSlave.pregType = 0;
-					V.activeSlave.belly = 0;
-					V.activeSlave.bellyPreg = 0;
-					V.activeSlave.pregSource = 0;
-					V.activeSlave.pregWeek = 0;
-					V.activeSlave.pregKnown = 0;
-				}).addValue("Barren", -2, () => {
-					V.activeSlave.pregType = 0;
-					V.activeSlave.belly = 0;
-					V.activeSlave.bellyPreg = 0;
-					V.activeSlave.pregSource = 0;
-					V.activeSlave.pregWeek = 0;
-					V.activeSlave.pregKnown = 0;
-				})>>
-			<</if>>
-
-			<<if $PC.dick > 0 && $activeSlave.preg > 0>>
-				<<run _options.addOption("Father of child", "pregSource", $activeSlave)
-				.addValueList([["My child", -1], ["Not me", 0]])>>
-			<</if>>
-		<</if>>
-	<</if>>
-
-	<<if $seeDicks !== 0 || $makeDicks === 1>>
-		<<run _options.addOption("Penis", "dick", $activeSlave)
-		.addValue("None", 0, () => {
-			V.activeSlave.balls = 0;
-			V.activeSlave.pubertyXY = 0;
-			V.activeSlave.pubertyAgeXY = V.potencyAge;
-		}).addValue("Tiny", 1, () => {V.activeSlave.clit = 0})
-		.addValue("Small", 2, () => {V.activeSlave.clit = 0})
-		.addValue("Normal", 3, () => {V.activeSlave.clit = 0})
-		.addValue("Large", 4, () => {V.activeSlave.clit = 0})
-		.addValue("Massive", 5, () => {V.activeSlave.clit = 0})>>
-
-		<<if $activeSlave.dick > 0>>
-			<<set _option = _options.addOption("Foreskin", "foreskin", $activeSlave)>>
-			<<if $seeCircumcision === 1>>
-				<<run _option.addValue("Circumcised", 0)>>
-			<<elseif $activeSlave.foreskin === 0>>
-				<<set $activeSlave.foreskin = 3>>
-			<</if>>
-			<<run _option.addValueList([["Tiny", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]])>>
-		<</if>>
-
-		<<run _options.addOption("Testicles", "balls", $activeSlave)
-		.addValue("None", 0, () => {
-			V.activeSlave.pubertyXY = 0;
-			V.activeSlave.pubertyAgeXY = V.potencyAge;
-			V.activeSlave.scrotum = 0;
-		}).addValueList([["Vestigial", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]])>>
-
-		<<run _options.addOption("Age of Male Puberty", "pubertyAgeXY", $activeSlave).showTextBox()>>
-
-		<<if $activeSlave.balls > 0>>
-			<<run _options.addOption("Ballsack", "scrotum", $activeSlave)
-			.addValueList([["None", 0], ["Tiny", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]])>>
-
-			<<run _options.addOption("Male Puberty", "pubertyXY", $activeSlave)
-			.addValue("Prepubescent", 0, () => {V.activeSlave.pubertyAgeXY = V.potencyAge})
-			.addValue("Postpubescent", 1)>>
-		<</if>>
-	<</if>>
-
-	<<run _options.addOption("Prostate", "prostate", $activeSlave)
-	.addValueList([["No prostate", 0], ["Has a prostate", 1]])>>
-
-	<<set _optionLeft = _options.addOption("Left eye", "vision", $activeSlave.eye.left)>>
-	<<set _optionRight = _options.addOption("Right eye", "vision", $activeSlave.eye.right)>>
-	<<run _optionLeft.addValueList([["Normal", 2], ["Nearsighted", 1]]), _optionRight.addValueList([["Normal", 2], ["Nearsighted", 1]])>>
-	<<if $seeExtreme === 1>>
-		<<run _optionLeft.addValue("Blind", 0),  _optionRight.addValue("Blind", 0)>>
-	<<else>>
-		<<if $activeSlave.eye.left.vision === 0>>
-			<<set $activeSlave.eye.left.vision = 2>>
-		<</if>>
-		<<if $activeSlave.eye.right.vision === 0>>
-			<<set $activeSlave.eye.right.vision = 2>>
-		<</if>>
-	<</if>>
-
-	<<set _option = _options.addOption("Hearing", "hears", $activeSlave)>>
-	<<run _option.addValueList([["Normal", 0], ["Hard of hearing", -1]])>>
-	<<if $seeExtreme == 1>>
-		<<run _option.addValue("Deaf", -2)>>
-	<<elseif $activeSlave.hears === 0>>
-		<<set $activeSlave.hears = 2>>
-	<</if>>
-
-
-	<<if $seeExtreme == 1>>
-		<<run _options.addOption("Smell ability", "smells", $activeSlave)
-		.addValueList([["Normal", 0], ["None", -1]])>>
-
-		<<run _options.addOption("Taste ability", "tastes", $activeSlave)
-		.addValueList([["Normal", 0], ["None", -1]])>>
-
-		<<set _LA = hasLeftArm($activeSlave)>>
-		<<run _options.addOption("Left arm", "LA", State.temporary)
-		.addValue("Healthy", true, () => V.activeSlave.arm.left = new App.Entity.LimbState())
-		.addValue("Amputated", false, () => V.activeSlave.arm.left = null)>>
-
-		<<set _RA = hasRightArm($activeSlave)>>
-		<<run _options.addOption("Right arm", "RA", State.temporary)
-		.addValue("Healthy", true, () => V.activeSlave.arm.right = new App.Entity.LimbState())
-		.addValue("Amputated", false, () => V.activeSlave.arm.right = null)>>
-
-		<<set _LL = hasLeftLeg($activeSlave)>>
-		<<run _options.addOption("Left leg", "LL", State.temporary)
-		.addValue("Healthy", true, () => V.activeSlave.leg.left = new App.Entity.LimbState())
-		.addValue("Amputated", false, () => V.activeSlave.leg.left = null)>>
-
-		<<set _RL = hasRightLeg($activeSlave)>>
-		<<run _options.addOption("Right leg", "RL", State.temporary)
-		.addValue("Healthy", true, () => V.activeSlave.leg.right = new App.Entity.LimbState())
-		.addValue("Amputated", false, () => V.activeSlave.leg.right = null)>>
-	<</if>>
-
-	<<includeDOM _options.render()>>
+		<<includeDOM App.StartingGirls.physical($activeSlave)>>
 	</div>
 </div>
 
 <div id="Mental" class="tab-content">
 	<div class="content">
-
-	<<set _options = new App.UI.OptionsGroup()>>
-	<<if $activeSlave.fetishKnown === 0>>
-		<<run _options.addOption("Fetish", "fetishKnown", $activeSlave)
-		.addValueList([["Unknown", 0], ["Known", 1]])>>
-	<<else>>
-		<<set _option = _options.addOption("Fetish", "fetish", $activeSlave)
-		.addValue("Unknown", "", () => {
-			V.activeSlave.fetish = either("boobs", "buttslut", "cumslut", "dom", "humiliation", "masochist", "pregnancy", "sadist",
-				"submissive", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none");
-			V.activeSlave.fetishKnown = 0
-		}).addValueList([["None", "none"], ["Sub", "submissive"], ["Dom", "dom"], ["Cumslut", "cumslut"], ["Humiliation", "humiliation"],
-		["Buttslut", "buttslut"], ["Breasts", "boobs"], ["Pregnancy", "pregnancy"], ["Sadism", "sadist"], ["Masochism", "masochist"]])>>
-		<<if $seeExtreme === 1>>
-			<<run _option.addValue("Mindbroken", "mindbroken", () => {
-				V.activeSlave.fetishStrength = 10;
-				V.activeSlave.sexualFlaw = "none";
-				V.activeSlave.sexualQuirk = "none";
-				V.activeSlave.behavioralFlaw = "none";
-				V.activeSlave.behavioralQuirk = "none";
-			})>>
-		<</if>>
-
-		<<if $activeSlave.fetish !== "none" && $activeSlave.fetish !== "mindbroken">>
-			<<run _options.addOption("Fetish strength", "fetishStrength", $activeSlave)
-			.addRange(15, 30, "<=", "Very Low")
-			.addRange(45, 60, "<=", "Low")
-			.addRange(75, 85, "<=", "Normal")
-			.addRange(90, 95, "<=", "High")
-			.addRange(100, 95, ">", "Extremely High")>>
-		<</if>>
-	<</if>>
-
-	<<run _options.addOption("Sexuality", "attrKnown", $activeSlave)
-	.addValue("Unknown", 0).addValue("Known", 1, () => {
-		V.activeSlave.attrXX = random(0, 100);
-		V.activeSlave.attrXY = random(0, 100);
-		V.activeSlave.energy = random(1, 90);
-	})>>
-	<<if $activeSlave.attrKnown === 1>>
-		<<run _options.addOption("Attraction to men", "attrXY", $activeSlave)
-		.addRange(0, 5, "<=", "Disgusted").off()
-		.addRange(10, 15, "<=", "Turned off").off()
-		.addRange(25, 35, "<=", "Not attracted").off()
-		.addRange(50, 65, "<=", "Indifferent").neutral()
-		.addRange(75, 85, "<=", "Attracted").on()
-		.addRange(90, 95, "<=", "Aroused").on()
-		.addRange(100, 95, ">", "Passionate").on()>>
-		<<run _options.addOption("Attraction to women", "attrXX", $activeSlave)
-		.addRange(0, 5, "<=", "Disgusted").off()
-		.addRange(10, 15, "<=", "Turned off").off()
-		.addRange(25, 35, "<=", "Not attracted").off()
-		.addRange(50, 65, "<=", "Indifferent").neutral()
-		.addRange(75, 85, "<=", "Attracted").on()
-		.addRange(90, 95, "<=", "Aroused").on()
-		.addRange(100, 95, ">", "Passionate").on()>>
-
-		<<run _options.addOption("Sex drive", "energy", $activeSlave)
-		.addRange(5, 10, "<=", "Frigid").off()
-		.addRange(25, 40, "<=", "Poor").off()
-		.addRange(45, 60, "<=", "Average").neutral()
-		.addRange(65, 80, "<=", "Powerful").on()
-		.addRange(85, 99, "<=", "Sex addict").on()
-		.addRange(100, 99, ">", "Nympho").on()>>
-	<</if>>
-
-	<<if $activeSlave.fetish !== "mindbroken">>
-		<<run _options.addOption("Behavioral Flaw", "behavioralFlaw", $activeSlave)
-		.addValueList([["None", "none"], ["Arrogant", "arrogant"], ["Bitchy", "bitchy"], ["Odd", "odd"], ["Hates Men", "hates men"],
-		["Hates Women", "hates women"], ["Anorexic", "anorexic"], ["Gluttonous", "gluttonous"], ["Devout", "devout"],
-		["Liberated", "liberated"]])>>
-
-		<<run _options.addOption("Behavioral Quirk", "behavioralQuirk", $activeSlave)
-		.addValueList([["None", "none"], ["Confident", "confident"], ["Cutting", "cutting"], ["Funny", "funny"],
-		["Adores Men", "adores men"], ["Adores Women", "adores women"], ["Insecure", "insecure"], ["Fitness", "fitness"],
-		["Sinful", "sinful"], ["Advocate", "advocate"]])>>
-
-		<<run _options.addOption("Sexual Flaw", "sexualFlaw", $activeSlave)
-		.addValueList([["None", "none"], ["Hates Oral", "hates oral"], ["Hates Anal", "hates anal"],
-		["Hates Penetration", "hates penetration"], ["Repressed", "repressed"], ["Shamefast", "shamefast"], ["Apathetic", "apathetic"],
-		["Crude", "crude"], ["Judgemental", "judgemental"], ["Sexually idealistic", "idealistic"]])>>
-
-		<<run _options.addOption("Sexual Quirk", "sexualQuirk", $activeSlave)
-		.addValueList([["None", "none"], ["Oral", "gagfuck queen"], ["Anal", "painal queen"], ["Penetration", "strugglefuck queen"],
-		["Perverted", "perverted"], ["Tease", "tease"], ["Caring", "caring"], ["Unflinching", "unflinching"], ["Size queen", "size queen"],
-		["Romantic", "romantic"]])>>
-	<</if>>
-
-	<<includeDOM _options.render()>>
+		<<includeDOM App.StartingGirls.mental($activeSlave)>>
 	</div>
 </div>
 
@@ -931,44 +324,6 @@
 	</div>
 </div>
 
-<div id="Customization" class="tab-content">
-	<div class="content">
-
-	''Birth name:'' <<textbox "$activeSlave.birthName" $activeSlave.birthName "Starting Girls">>
-	| ''Slave name:'' <<textbox "$activeSlave.slaveName" $activeSlave.slaveName "Starting Girls">>
-	<br>''Birth surname:'' <<textbox "$activeSlave.birthSurname" $activeSlave.birthSurname "Starting Girls">>
-	| ''Slave surname:'' <<textbox "$activeSlave.slaveSurname" $activeSlave.slaveSurname "Starting Girls">>
-	<br>''Career:'' <span id="career-textbox"><<textbox "$activeSlave.career" $activeSlave.career "Starting Girls">></span>
-	<span id="careers"></span>
-	<script>jQuery('#careers').empty().append(App.StartingGirls.career(V.activeSlave));</script>
-	<br>''Eye color:'' <<textbox "$activeSlave.eye.origColor" $activeSlave.eye.origColor "Starting Girls">>
-	<<if def $pupil_temp>>
-		<<set $activeSlave.eye.left.pupil = $pupil_temp, $activeSlave.eye.right.pupil = $pupil_temp, delete $pupil_temp>>
-	<</if>>
-	<br>''Pupil shape:'' <<textbox "$pupil_temp" $activeSlave.eye.left.pupil "Starting Girls">>
-	<<if def $sclerae_temp>>
-		<<set $activeSlave.eye.left.sclera = $sclerae_temp, $activeSlave.eye.right.sclera = $sclerae_temp, delete $sclerae_temp>>
-	<</if>>
-	<br>''Sclera color:'' <<textbox "$sclerae_temp" $activeSlave.eye.left.sclera "Starting Girls">>
-	<br>Custom origin story: <<textbox "$activeSlave.origin" $activeSlave.origin "Starting Girls">> //Use complete, capitalized and punctuated sentences.//
-	<br>Origin override:
-	<<if $originOverride == 1>>
-		@@.green;Enabled@@ [[Disable|Starting Girls][$originOverride = 0]] //Disabling will allow Starting Girls to overwrite origins and tattoos with its defaults.//
-	<<else>>
-		@@.red;Disabled@@ [[Enable|Starting Girls][$originOverride = 1]] //Enabling will keep your custom origin and tattoo from being overwritten by Starting Girls.//
-	<</if>>
-	<<if $activeSlave.prestige>>
-		<br>Reason for prestigiousness: <<textbox "$activeSlave.prestigeDesc" $activeSlave.prestigeDesc>> //Use complete, capitalized and punctuated sentences.//
-	<</if>>
-	<br>Custom description: <<textbox "$activeSlave.custom.desc" $activeSlave.custom.desc "Starting Girls">> //Use complete, capitalized and punctuated sentences.//
-	<br>Custom label: <<textbox "$activeSlave.custom.label" $activeSlave.custom.label "Starting Girls">> //Use a short phrase.//
-
-	<br><br>
-	''Births:'' <<textbox "$activeSlave.counter.birthsTotal" $activeSlave.counter.birthsTotal "Starting Girls">> //How many times $he has already given birth, not necessarily while owned by you.//
-
-	</div>
-</div>
-
 <div id="assignRemove" class="tab-content">
 	<div class="content">
 
diff --git a/src/uncategorized/cellblock.tw b/src/uncategorized/cellblock.tw
index c8735ddd82a94eb262982cba29d46967f42d5abf..beb66b4c19905612ab1a1c5893c55c4d94071b1c 100644
--- a/src/uncategorized/cellblock.tw
+++ b/src/uncategorized/cellblock.tw
@@ -88,7 +88,7 @@
 <div>
 	<<set _Tmult0 = Math.trunc($cellblock*1000*$upgradeMultiplierArcology)>>
 	_cellblockNameCaps has room for $cellblock slaves to be kept in close confinement.
-	There <<if _CL == 1>>is<<else>>are<</if>> currently _CL slaves<<if _CL != 1>>s<</if>> kept in close confinement in $cellblockName.
+	There <<if _CL == 1>>is<<else>>are<</if>> currently _CL slave<<if _CL != 1>>s<</if>> kept in close confinement in $cellblockName.
 	<div class="choices">
 		[[Expand the cellblock|Cellblock][cashX(forceNeg(_Tmult0), "capEx"), $cellblock += 5, $PC.skill.engineering += .1]]
 		<span class="note">