diff --git a/glyphs/letters-unified-extended.ptl b/glyphs/letters-unified-extended.ptl
index 27b4942..2fb8de5 100644
--- a/glyphs/letters-unified-extended.ptl
+++ b/glyphs/letters-unified-extended.ptl
@@ -1335,57 +1335,90 @@ export : define [apply] : begin
###########################################################################################
# UNIFIED LETTERFORMS : OTHER LATIN
###########################################################################################
-
- sketch # eszet
- set-width WIDTH
- include markset.if
- local l : SB * 1
- include : dispiro
- widths.lhs
- g4 ([mix SB RIGHTSB 0.75] + HALFSTROKE * HVCONTRAST) (CAP - HOOK)
- hookstart (CAP - O)
- flat l XH
- curl l 0 [heading DOWNWARD]
- local t : mix 0 CAP 0.7
- local tm : [mix DESCENDER t 0.625] + HALFSTROKE
- local tl : [mix l RIGHTSB 0.35] + HALFSTROKE * HVCONTRAST
- include : HBarTop (l + 1) (RIGHTSB - HALFSTROKE * 1.2 - OX) t
- include : dispiro
- widths.rhs
- flat tl tm [heading RIGHTWARD]
- curl (tl + 1) tm [heading RIGHTWARD]
- g2 (RIGHTSB - OX * 1.5) [mix DESCENDER tm 0.70]
- g2 (RIGHTSB - OX * 1.5) [mix DESCENDER tm 0.67]
- alsothru 0.5 0.75
- g4 [mix SB RIGHTSB 0.35] DESCENDER
- include : dispiro
- widths.center (STROKE * 1.1)
- corner tl (tm - STROKE) [heading UPWARD]
- corner (RIGHTSB - HALFSTROKE * 1.2 - OX) t [heading UPWARD]
- save 'eszet' 0xDF
-
- sketch # Eszet
- include markset.capital
- include : dispiro
- widths.lhs
- g4 (RIGHTSB + O * 2) (CAP - SMOOTHB)
- hookstart (CAP - O)
- flat SB XH
- curl SB 0 [heading DOWNWARD]
+ do
local ymiddle : [mix 0 CAP 0.5] - HALFSTROKE
- include : dispiro
- widths.rhs
- g4 (RIGHTSB - ymiddle / 2 - STROKE * 0.75) (ymiddle + STROKE)
- archv
- g4 (RIGHTSB - O) [mix 0 (ymiddle + STROKE) 0.5]
- arcvh
- flat (RIGHTSB - ymiddle / 2 - HALFSTROKE) 0
- curl (SB + STROKE - O * 3) 0 [heading LEFTWARD]
- include : dispiro
- widths.rhs
- g4 (RIGHTSB + O * 2) (CAP - SMOOTHB)
- g4 (RIGHTSB - ymiddle / 2 - STROKE * 0.75) (ymiddle + STROKE) [widths STROKE 0]
- save 'Eszet' 0x1E9E
+ local xmiddle : RIGHTSB - ymiddle / 2 - STROKE * 0.75
+ local xfinal : Math.min (RIGHTSB - ymiddle / 2 - HALFSTROKE - 1 - STROKE * TANSLANT) (SB + STROKE * 1.75)
+ sketch # eszet
+ set-width WIDTH
+ include markset.if
+ local l : SB * 1
+ include : dispiro
+ widths.lhs
+ g4 ([mix SB RIGHTSB 0.75] + HALFSTROKE * HVCONTRAST) (CAP - HOOK)
+ hookstart (CAP - O)
+ flat l XH
+ curl l 0 [heading DOWNWARD]
+ local t : mix 0 CAP 0.7
+ local tm : [mix DESCENDER t 0.625] + HALFSTROKE
+ local tl : [mix l RIGHTSB 0.35] + HALFSTROKE * HVCONTRAST
+ include : HBarTop (l + 1) (RIGHTSB - HALFSTROKE * 1.2 - OX) t
+ include : dispiro
+ widths.rhs
+ flat tl tm [heading RIGHTWARD]
+ curl (tl + 1) tm [heading RIGHTWARD]
+ g2 (RIGHTSB - OX * 1.5) [mix DESCENDER tm 0.70]
+ g2 (RIGHTSB - OX * 1.5) [mix DESCENDER tm 0.67]
+ alsothru 0.5 0.75
+ g4 [mix SB RIGHTSB 0.35] DESCENDER
+ include : dispiro
+ widths.center (STROKE * 1.1)
+ corner tl (tm - STROKE) [heading UPWARD]
+ corner (RIGHTSB - HALFSTROKE * 1.2 - OX) t [heading UPWARD]
+ piecewise
+ para.isItalic : include : VerticalHook (l + HALFSTROKE * HVCONTRAST) 0 (-HOOK * 1.2) HOOK
+ SLAB : include : LeftwardBottomSerif SB 0 SIDEJUT
+ save 'eszet.traditional'
+
+ sketch # eszet.sulzbacher
+ include markset.capital
+ include : dispiro
+ widths.rhs
+ flat SB 0 [heading UPWARD]
+ curl SB XH
+ arcvh
+ g4 (MIDDLE + O) (CAP - O)
+ archv
+ g4 (RIGHTSB + O * 2) [mix CAP ymiddle 0.47]
+ g4.left.end xmiddle ymiddle [heading LEFTWARD]
+ include : dispiro
+ widths.rhs
+ g4.right.start xmiddle (ymiddle + STROKE) [heading RIGHTWARD]
+ archv
+ g4 (RIGHTSB - O) [mix 0 (ymiddle + STROKE) 0.5]
+ arcvh
+ flat (RIGHTSB - ymiddle / 2 - HALFSTROKE) 0
+ curl xfinal 0 [heading LEFTWARD]
+ if SLAB : include : LeftwardBottomSerif SB 0 SIDEJUT
+ save 'eszet.sulzbacher'
+
+ select-variant 'eszet' 0xDF 'sulzbacher' {
+ .cv34 'eszet.traditional'
+ .cv35 'eszet.sulzbacher'
+ }
+
+ sketch # Eszet
+ include markset.capital
+ include : dispiro
+ widths.lhs
+ g4 (RIGHTSB + O * 2) (CAP - SMOOTHB)
+ hookstart (CAP - O)
+ flat SB XH
+ curl SB 0 [heading DOWNWARD]
+ include : dispiro
+ widths.rhs
+ g4 (RIGHTSB - ymiddle / 2 - STROKE * 0.75) (ymiddle + STROKE)
+ archv
+ g4 (RIGHTSB - O) [mix 0 (ymiddle + STROKE) 0.5]
+ arcvh
+ flat (RIGHTSB - ymiddle / 2 - HALFSTROKE) 0
+ curl xfinal 0 [heading LEFTWARD]
+ include : dispiro
+ widths.rhs
+ g4 (RIGHTSB + O * 2) (CAP - SMOOTHB)
+ g4 (RIGHTSB - ymiddle / 2 - STROKE * 0.75) (ymiddle + STROKE) [widths STROKE 0]
+ if SLAB : include : LeftwardBottomSerif SB 0 SIDEJUT
+ save 'Eszet' 0x1E9E
sketch # AE
diff --git a/parameters.toml b/parameters.toml
index 2e379c9..7b853af 100644
--- a/parameters.toml
+++ b/parameters.toml
@@ -78,26 +78,26 @@ powerlineShiftX = 0 # Horizontal shift
[iosevka.variantSelector]
[iosevka.sscompose.upright]
-ss01 = ['cv01', 'cv11', 'cv05', 'cv10', 'cv14', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv32'] # Andale Mono Style
-ss02 = ['cv01', 'cv12', 'cv03', 'cv07', 'cv13', 'cv19', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32'] # Anonymous Pro Style
-ss03 = ['cv01', 'cv11', 'cv03', 'cv07', 'cv13', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv32'] # Consolas Style
-ss04 = ['cv01', 'cv12', 'cv03', 'cv08', 'cv13', 'cv19', 'cv21', 'cv22', 'cv25', 'cv29', 'cv31'] # Menlo Style
-ss05 = ['cv01', 'cv24', 'cv03', 'cv08', 'cv14', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv33'] # Fira Mono Style
-ss06 = ['cv01', 'cv12', 'cv03', 'cv07', 'cv14', 'cv18', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32'] # Liberation Mono Style
-ss07 = ['cv02', 'cv12', 'cv06', 'cv10', 'cv13', 'cv18', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32'] # Monaco Style
-ss08 = ['cv01', 'cv11', 'cv03', 'cv07', 'cv14', 'cv19', 'cv21', 'cv22', 'cv25', 'cv29', 'cv31'] # Pragmata Pro Style
-ss09 = ['cv01', 'cv11', 'cv05', 'cv08', 'cv14', 'cv19', 'cv20', 'cv22', 'cv25', 'cv29', 'cv31'] # Source Code Pro Style
+ss01 = ['cv01', 'cv11', 'cv05', 'cv10', 'cv14', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv32', 'cv34'] # Andale Mono Style
+ss02 = ['cv01', 'cv12', 'cv03', 'cv07', 'cv13', 'cv19', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32', 'cv34'] # Anonymous Pro Style
+ss03 = ['cv01', 'cv11', 'cv03', 'cv07', 'cv13', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv32', 'cv34'] # Consolas Style
+ss04 = ['cv01', 'cv12', 'cv03', 'cv08', 'cv13', 'cv19', 'cv21', 'cv22', 'cv25', 'cv29', 'cv31', 'cv34'] # Menlo Style
+ss05 = ['cv01', 'cv24', 'cv03', 'cv08', 'cv14', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv33', 'cv34'] # Fira Mono Style
+ss06 = ['cv01', 'cv12', 'cv03', 'cv07', 'cv14', 'cv18', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32', 'cv34'] # Liberation Mono Style
+ss07 = ['cv02', 'cv12', 'cv06', 'cv10', 'cv13', 'cv18', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32', 'cv34'] # Monaco Style
+ss08 = ['cv01', 'cv11', 'cv03', 'cv07', 'cv14', 'cv19', 'cv21', 'cv22', 'cv25', 'cv29', 'cv31', 'cv34'] # Pragmata Pro Style
+ss09 = ['cv01', 'cv11', 'cv05', 'cv08', 'cv14', 'cv19', 'cv20', 'cv22', 'cv25', 'cv29', 'cv31', 'cv34'] # Source Code Pro Style
[iosevka.sscompose.italic]
-ss01 = ['cv01', 'cv11', 'cv05', 'cv10', 'cv14', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv32'] # Andale Mono Style
-ss02 = ['cv01', 'cv12', 'cv03', 'cv07', 'cv13', 'cv19', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32'] # Anonymous Pro Style
-ss03 = ['cv02', 'cv12', 'cv04', 'cv08', 'cv13', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv32'] # Consolas Style
-ss04 = ['cv01', 'cv12', 'cv03', 'cv08', 'cv13', 'cv19', 'cv21', 'cv22', 'cv25', 'cv29', 'cv31'] # Menlo Style
-ss05 = ['cv01', 'cv24', 'cv03', 'cv08', 'cv14', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv33'] # Fira Mono Style
-ss06 = ['cv01', 'cv12', 'cv03', 'cv07', 'cv14', 'cv18', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32'] # Liberation Mono Style
-ss07 = ['cv02', 'cv12', 'cv06', 'cv10', 'cv13', 'cv18', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32'] # Monaco Style
-ss08 = ['cv01', 'cv12', 'cv03', 'cv07', 'cv14', 'cv19', 'cv21', 'cv22', 'cv25', 'cv29', 'cv31'] # Pragmata Pro Style
-ss09 = ['cv02', 'cv12', 'cv04', 'cv08', 'cv14', 'cv19', 'cv20', 'cv22', 'cv25', 'cv29', 'cv31'] # Source Code Pro Style
+ss01 = ['cv01', 'cv11', 'cv05', 'cv10', 'cv14', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv32', 'cv34'] # Andale Mono Style
+ss02 = ['cv01', 'cv12', 'cv03', 'cv07', 'cv13', 'cv19', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32', 'cv34'] # Anonymous Pro Style
+ss03 = ['cv02', 'cv12', 'cv04', 'cv08', 'cv13', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv32', 'cv34'] # Consolas Style
+ss04 = ['cv01', 'cv12', 'cv03', 'cv08', 'cv13', 'cv19', 'cv21', 'cv22', 'cv25', 'cv29', 'cv31', 'cv34'] # Menlo Style
+ss05 = ['cv01', 'cv24', 'cv03', 'cv08', 'cv14', 'cv18', 'cv21', 'cv22', 'cv25', 'cv29', 'cv33', 'cv34'] # Fira Mono Style
+ss06 = ['cv01', 'cv12', 'cv03', 'cv07', 'cv14', 'cv18', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32', 'cv34'] # Liberation Mono Style
+ss07 = ['cv02', 'cv12', 'cv06', 'cv10', 'cv13', 'cv18', 'cv20', 'cv22', 'cv25', 'cv29', 'cv32', 'cv34'] # Monaco Style
+ss08 = ['cv01', 'cv12', 'cv03', 'cv07', 'cv14', 'cv19', 'cv21', 'cv22', 'cv25', 'cv29', 'cv31', 'cv34'] # Pragmata Pro Style
+ss09 = ['cv02', 'cv12', 'cv04', 'cv08', 'cv14', 'cv19', 'cv20', 'cv22', 'cv25', 'cv29', 'cv31', 'cv34'] # Source Code Pro Style
[verbose]
verbose = true
@@ -711,3 +711,13 @@ at = 'fourfold'
at = 'short'
[cv33.variantSelector]
at = 'short'
+
+[v-eszet-traditional.variantSelector]
+eszet = 'traditional'
+[cv34.variantSelector]
+eszet = 'traditional'
+
+[v-eszet-sulzbacher.variantSelector]
+eszet = 'sulzbacher'
+[cv35.variantSelector]
+eszet = 'sulzbacher'
\ No newline at end of file
diff --git a/testdrive/index.html b/testdrive/index.html
index 8b2b015..c722b0a 100644
--- a/testdrive/index.html
+++ b/testdrive/index.html
@@ -7,7 +7,7 @@
-
+