diff --git a/GridKit/Model/PhasorDynamics/Exciter/ESST4B/README.md b/GridKit/Model/PhasorDynamics/Exciter/ESST4B/README.md
new file mode 100644
index 000000000..fa77d9030
--- /dev/null
+++ b/GridKit/Model/PhasorDynamics/Exciter/ESST4B/README.md
@@ -0,0 +1,243 @@
+# **IEEE Type ST4B Potential- or Compound-Source Controlled-Rectifier Exciter Model (ESST4B)**
+
+ESST4B is a static excitation system with compensated-voltage sensing, an outer
+proportional/integral voltage regulator, a lag block, an inner
+proportional/integral regulator with exciter-output feedback, low-value
+over-excitation limiter gating, and potential- or compound-source rectifier
+scaling.
+
+Notes:
+- Internal voltage and current signals are on model base unless otherwise stated.
+- The rectifier loading block $F_{\mathrm{ex}}=f(I_N)$ is the source
+ controlled-rectifier loading curve from Fig. 1; it is not a CommonMath helper.
+- The potential-source calculation uses explicit real and imaginary terminal
+ voltage/current components; the diagram's complex expression is not used as
+ model-equation notation below.
+
+## Block Diagram
+
+Standard model of the ESST4B Exciter.
+
+
+

+
+ Figure 1: Exciter ESST4B model. Figure courtesy of [PowerWorld](https://www.powerworld.com/WebHelp/)
+
+
+## Model Parameters
+
+Symbol | Units | JSON | Description | Typical Value | Note
+------------------------------------|--------|-------------|---------------------------------------------------------|---------------|------
+$T_R$ | [sec] | `Tr` | Compensated-voltage transducer time constant | 0.0 | Block name: `Tr`; if zero, sensed voltage is algebraic
+$K_{\mathrm{pr}}$ | [p.u.] | `Kpr` | Outer regulator proportional gain | 1.0 | Block name: `KPR`
+$K_{\mathrm{ir}}$ | [p.u./s] | `Kir` | Outer regulator integral gain | 0.0 | Block name: `KIR`
+$V_R^{\max}$ | [p.u.] | `Vrmax` | Maximum outer regulator output | 1.0 | Block name: `VRMAX`
+$V_R^{\min}$ | [p.u.] | `Vrmin` | Minimum outer regulator output | -1.0 | Block name: `VRMIN`
+$T_A$ | [sec] | `Ta` | Regulator lag time constant | 0.0 | Block name: `Ta`; if zero, $V_A$ is algebraic
+$K_{\mathrm{pm}}$ | [p.u.] | `Kpm` | Inner regulator proportional gain | 1.0 | Block name: `KPM`
+$K_{\mathrm{im}}$ | [p.u./s] | `Kim` | Inner regulator integral gain | 0.0 | Block name: `KIM`
+$V_M^{\max}$ | [p.u.] | `VmMax` | Maximum inner regulator output | 1.0 | Block name: `VMMAX`
+$V_M^{\min}$ | [p.u.] | `VmMin` | Minimum inner regulator output | 0.0 | Block name: `VMMIN`
+$K_G$ | [p.u.] | `Kg` | Exciter-output feedback gain into inner regulator | 0.0 | Block name: `KG`
+$K_P$ | [p.u.] | `Kp` | Potential-source voltage coefficient magnitude | 0.0 | Source label: `KP`
+$K_I$ | [p.u.] | `Ki` | Potential-source current coefficient | 0.0 | Source label: `KI`
+$V_B^{\max}$ | [p.u.] | `VbMax` | Maximum rectifier source multiplier | 999.0 | Block name: `VBMAX`
+$K_C$ | [p.u.] | `Kc` | Rectifier loading current coefficient | 0.0 | Block name: `Kc`; forms $I_N$
+$X_L$ | [p.u.] | `Xl` | Source reactance term in potential-source calculation | 0.0 | Source label: `XL`
+$\theta_P$ | [deg] | `ThetaPDeg` | Potential-source coefficient angle | 0.0 | Source label: `thetaP`; forms $K_P^{\mathrm{r}}$ and $K_P^{\mathrm{i}}$
+$V_G^{\max}$ | [p.u.] | `VgMax` | Maximum exciter-output feedback signal | 999.0 | Block name: `VGMAX`; ceiling on $K_G E_{\mathrm{fd}}$
+
+### Parameter Validation
+
+Invalid ESST4B parameter sets are rejected by the following checks.
+
+```math
+\begin{aligned}
+ &T_R \ge 0,\quad T_A \ge 0 \\
+ &V_R^{\min} \le V_R^{\max},\quad V_M^{\min} \le V_M^{\max} \\
+ &V_B^{\max} > 0,\quad V_G^{\max} \ge 0
+\end{aligned}
+```
+
+### Model Derived Parameters
+
+The potential-source coefficient is resolved into real scalar components:
+
+```math
+\begin{aligned}
+ K_P^{\mathrm{r}} &= K_P\cos\theta_P \\
+ K_P^{\mathrm{i}} &= K_P\sin\theta_P
+\end{aligned}
+```
+
+Here $\theta_P$ is converted from degrees before evaluating the trigonometric
+functions.
+
+## Model Variables
+
+### Internal Variables
+
+#### Differential
+
+Symbol | Units | Description | Note
+------------------------------------|--------|---------------------------------------------------------|------
+$V_M$ | [p.u.] | Inner regulator output | State 1 in Fig. 1
+$V_C$ | [p.u.] | Sensed compensated voltage | State 2 in Fig. 1; source label: `Sensed Vt`; algebraic when $T_R=0$
+$V_A$ | [p.u.] | Lagged outer-regulator output | State 3 in Fig. 1; algebraic when $T_A=0$
+$x_R$ | [p.u.] | Outer regulator integral state | State 4 in Fig. 1; source label: `VR`
+
+#### Algebraic
+
+Symbol | Units | Description | Note
+------------------------------------|--------|---------------------------------------------------------|------
+$e_V$ | [p.u.] | Voltage-error signal into outer regulator | Summing junction after sensed voltage
+$V_R$ | [p.u.] | Limited outer regulator output | Limited by $V_R^{\min}$ and $V_R^{\max}$
+$V_G$ | [p.u.] | Limited exciter-output feedback signal | $K_G E_{\mathrm{fd}}$ limited by $V_G^{\max}$
+$e_M$ | [p.u.] | Inner regulator error | $V_A$ minus $V_G$
+$V_{\mathrm{lv}}$ | [p.u.] | Low-value gate output | Lesser of $V_M$ and $V_{\mathrm{oel}}$
+$V_{\mathrm{src}}^{\mathrm{r}}$ | [p.u.] | Real component of the potential-source expression | From terminal voltage/current components
+$V_{\mathrm{src}}^{\mathrm{i}}$ | [p.u.] | Imaginary component of the potential-source expression | From terminal voltage/current components
+$V_E$ | [p.u.] | Potential- or compound-source voltage magnitude | Nonnegative source magnitude
+$I_N$ | [p.u.] | Normalized exciter loading current | Source label: `IN`; satisfies $V_E I_N=K_C I_{\mathrm{fd}}$
+$F_{\mathrm{ex}}$ | [p.u.] | Rectifier loading factor | Source label: `FEX`; source curve $F_{\mathrm{ex}}=f(I_N)$
+$V_B$ | [p.u.] | Rectifier source multiplier | Limited by $V_B^{\max}$
+$E_{\mathrm{fd}}$ | [p.u.] | Field-voltage output | Product of low-value gate and $V_B$
+
+### External Variables
+
+#### Differential
+
+None.
+
+#### Algebraic
+
+Symbol | Units | Description | Note
+------------------------------------|--------|---------------------------------------------------------|------
+$V_{\mathrm{comp}}$ | [p.u.] | Compensated voltage input | Source label: `VCOMP`
+$V_{\mathrm{ref}}$ | [p.u.] | Voltage-control reference | Source label: `VREF`
+$V_{\mathrm{uel}}$ | [p.u.] | Under-excitation limiter input | Source label: `VUEL`; optional, defaults to zero
+$V_S$ | [p.u.] | Stabilizer input signal | Source label: `VS`; optional, defaults to zero
+$V_{\mathrm{oel}}$ | [p.u.] | Over-excitation limiter input | Source label: `VOEL`; optional, defaults to a high value when omitted
+$V_{\mathrm{r}}$ | [p.u.] | Terminal-voltage real component | Source label: `VT`
+$V_{\mathrm{i}}$ | [p.u.] | Terminal-voltage imaginary component | Source label: `VT`
+$I_{\mathrm{r}}$ | [p.u.] | Terminal-current real component | Source label: `IT`
+$I_{\mathrm{i}}$ | [p.u.] | Terminal-current imaginary component | Source label: `IT`
+$I_{\mathrm{fd}}$ | [p.u.] | Machine field current | Source label: `IFD`
+
+## Model Equations
+
+### Differential Equations
+
+```math
+\begin{aligned}
+ 0 &= -T_R\dot V_C - V_C + V_{\mathrm{comp}} \\
+ 0 &=
+ -\dot x_R
+ + \text{antiwindup}\!\left(
+ V_R,
+ K_{\mathrm{ir}}e_V,
+ V_R^{\min},
+ V_R^{\max}
+ \right) \\
+ 0 &= -T_A\dot V_A - V_A + V_R \\
+ 0 &=
+ -\dot V_M
+ + \text{antiwindup}\!\left(
+ V_M,
+ K_{\mathrm{im}}e_M,
+ V_M^{\min},
+ V_M^{\max}
+ \right)
+\end{aligned}
+```
+
+CommonMath defines the [Anti-Windup](../../../../CommonMath.md#anti-windup-indicator)
+target and smooth approximation.
+
+### Algebraic Equations
+
+```math
+\begin{aligned}
+ 0 &= -e_V + V_{\mathrm{ref}} + V_{\mathrm{uel}} + V_S - V_C \\
+ 0 &= -V_R + \text{clamp}(K_{\mathrm{pr}}e_V + x_R, V_R^{\min}, V_R^{\max}) \\
+ 0 &= -V_G + \text{min}(K_G E_{\mathrm{fd}}, V_G^{\max}) \\
+ 0 &= -e_M + V_A - V_G \\
+ 0 &= -V_{\mathrm{lv}} + \text{min}(V_M, V_{\mathrm{oel}}) \\
+ 0 &= -V_{\mathrm{src}}^{\mathrm{r}}
+ + K_P V_{\mathrm{r}}
+ - X_L K_P^{\mathrm{i}} I_{\mathrm{r}}
+ - \left(K_I + X_L K_P^{\mathrm{r}}\right)I_{\mathrm{i}} \\
+ 0 &= -V_{\mathrm{src}}^{\mathrm{i}}
+ + K_P V_{\mathrm{i}}
+ + \left(K_I + X_L K_P^{\mathrm{r}}\right)I_{\mathrm{r}}
+ - X_L K_P^{\mathrm{i}} I_{\mathrm{i}} \\
+ 0 &= -V_E^2
+ + \left(V_{\mathrm{src}}^{\mathrm{r}}\right)^2
+ + \left(V_{\mathrm{src}}^{\mathrm{i}}\right)^2 \\
+ 0 &= -V_E I_N + K_C I_{\mathrm{fd}} \\
+ 0 &= -F_{\mathrm{ex}} + f(I_N) \\
+ 0 &= -V_B + \text{min}(V_E F_{\mathrm{ex}}, V_B^{\max}) \\
+ 0 &= -E_{\mathrm{fd}} + V_{\mathrm{lv}}V_B
+\end{aligned}
+```
+
+CommonMath defines helper targets for [min and clamp](../../../../CommonMath.md#derived-functions).
+The rectifier loading function $f(I_N)$ is the source curve shown in Fig. 1.
+
+## Initialization
+
+For a standard unsaturated start, the machine initializes
+$E_{\mathrm{fd},0}$ and $I_{\mathrm{fd},0}$ first. ESST4B reads those values,
+sets all internal derivatives to zero, and evaluates:
+
+```math
+\begin{aligned}
+ V_{C,0} &= V_{\mathrm{comp},0} \\
+ V_{\mathrm{src},0}^{\mathrm{r}}
+ &= K_P V_{\mathrm{r},0}
+ - X_L K_P^{\mathrm{i}} I_{\mathrm{r},0}
+ - \left(K_I + X_L K_P^{\mathrm{r}}\right)I_{\mathrm{i},0} \\
+ V_{\mathrm{src},0}^{\mathrm{i}}
+ &= K_P V_{\mathrm{i},0}
+ + \left(K_I + X_L K_P^{\mathrm{r}}\right)I_{\mathrm{r},0}
+ - X_L K_P^{\mathrm{i}} I_{\mathrm{i},0} \\
+ V_{E,0} &=
+ \sqrt{
+ \left(V_{\mathrm{src},0}^{\mathrm{r}}\right)^2
+ + \left(V_{\mathrm{src},0}^{\mathrm{i}}\right)^2
+ } \\
+ 0 &= -V_{E,0}I_{N,0} + K_C I_{\mathrm{fd},0} \\
+ F_{\mathrm{ex},0} &= f(I_{N,0}) \\
+ V_{B,0} &= \text{min}(V_{E,0}F_{\mathrm{ex},0}, V_B^{\max}) \\
+ V_{\mathrm{lv},0} &= \dfrac{E_{\mathrm{fd},0}}{V_{B,0}} \\
+ V_{M,0} &= V_{\mathrm{lv},0} \\
+ V_{G,0} &= \text{min}(K_G E_{\mathrm{fd},0}, V_G^{\max}) \\
+ e_{M,0} &= 0 \\
+ V_{A,0} &= V_{G,0} \\
+ V_{R,0} &= V_{A,0} \\
+ x_{R,0} &= V_{R,0} \\
+ e_{V,0} &= 0 \\
+ V_{\mathrm{ref},0} &= V_{C,0} - V_{\mathrm{uel},0} - V_{S,0}
+\end{aligned}
+```
+
+This closed-form start requires $V_{E,0}\ne 0$, $V_{B,0}\ne 0$, inactive
+$V_R$, $V_M$, $V_G$, and $V_B$ limits, and the low-value gate selecting $V_M$.
+Starts with active low-value gate limiting or saturated PI states are outside
+these closed-form equations.
+
+## Model Outputs
+
+Output | Units | Description | Note
+----------------|--------|-------------------------------------|------
+`efd` | [p.u.] | Field-voltage output | $E_{\mathrm{fd}}$
+`vm` | [p.u.] | Inner regulator output | $V_M$
+`vc` | [p.u.] | Sensed compensated voltage | $V_C$
+`va` | [p.u.] | Lagged outer-regulator output | $V_A$
+`vr` | [p.u.] | Outer regulator output | $V_R$
+`vg` | [p.u.] | Exciter-output feedback signal | $V_G$
+`vlv` | [p.u.] | Low-value gate output | $V_{\mathrm{lv}}$
+`ve` | [p.u.] | Potential-source voltage magnitude | $V_E$
+`vb` | [p.u.] | Rectifier source multiplier | $V_B$
+`in` | [p.u.] | Normalized exciter loading current | $I_N$
+`fex` | [p.u.] | Rectifier loading factor | $F_{\mathrm{ex}}$
diff --git a/GridKit/Model/PhasorDynamics/Exciter/README.md b/GridKit/Model/PhasorDynamics/Exciter/README.md
index 03428d4be..16008155d 100644
--- a/GridKit/Model/PhasorDynamics/Exciter/README.md
+++ b/GridKit/Model/PhasorDynamics/Exciter/README.md
@@ -17,4 +17,5 @@ There are a few standard Exciter models
- IEEE DC1 Excitation Model (See [EXDC1](EXDC1/README.md))
- ESDC2A Excitation Model (See [ESDC2A](ESDC2A/README.md))
- EXAC1 Excitation Model (See [EXAC1](EXAC1/README.md))
+- IEEE ST4B Excitation Model (See [ESST4B](ESST4B/README.md))
- Simplified Excitation System Model (See [SEXS-PTI](SEXS-PTI/README.md))
diff --git a/docs/Figures/PhasorDynamics/ESST4B_diagram.png b/docs/Figures/PhasorDynamics/ESST4B_diagram.png
new file mode 100644
index 000000000..b4244e34a
Binary files /dev/null and b/docs/Figures/PhasorDynamics/ESST4B_diagram.png differ