diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2003_Alaska.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2003_Alaska.java
index 320671a465d2083dc3617fb45e0f82e67f40528c..da9bf2222199ea431e6da695fe2c2079511c4695 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2003_Alaska.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2003_Alaska.java
@@ -18,7 +18,7 @@ import gov.usgs.earthquake.nshmp.gmm.GmmInput.Constraints;
 import gov.usgs.earthquake.nshmp.tree.LogicTree;
 
 /**
- * Alaska-specific implementation of the Boore, Joyner & Fumal (1997) ground
+ * Alaska-specific implementation of the Campbell & Bozorgnia (2003) ground
  * motion model for shallow earthquakes in active continental crust. This
  * implementation was created to match fortran implementation with custom
  * coefficients such as 'csite'.
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CombinedGmm.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CombinedGmm.java
index a7b5db0e43fa5ea1fd0cd7f53337e2eaa309eb7c..857cb19bc3741a1e2e41afb1d6a04d0ad5b106fb 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CombinedGmm.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CombinedGmm.java
@@ -19,11 +19,13 @@ import static gov.usgs.earthquake.nshmp.gmm.Gmm.ATKINSON_10;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.BCHYDRO_12_INTERFACE_BASIN;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.BCHYDRO_12_SLAB;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.BCHYDRO_12_SLAB_BASIN;
+import static gov.usgs.earthquake.nshmp.gmm.Gmm.BJF_97;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.BJF_97_AK;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.BSSA_14;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.BSSA_14_BASIN;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.BSSA_14_CYBERSHAKE;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.CAMPBELL_03;
+import static gov.usgs.earthquake.nshmp.gmm.Gmm.CB_03;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.CB_03_AK_FAULT;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.CB_14;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.CB_14_BASIN;
@@ -43,6 +45,7 @@ import static gov.usgs.earthquake.nshmp.gmm.Gmm.KBCG_20_CASCADIA_SLAB_BASIN;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.KBCG_20_CASCADIA_SLAB_SEATTLE_BASIN;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.KBCG_20_GLOBAL_INTERFACE;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.KBCG_20_GLOBAL_INTERFACE_AK_ADJUSTED;
+import static gov.usgs.earthquake.nshmp.gmm.Gmm.MA_03;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.NGA_EAST_2018;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.NGA_EAST_2023;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.NGA_EAST_2023_ADJUSTED;
@@ -60,6 +63,7 @@ import static gov.usgs.earthquake.nshmp.gmm.Gmm.PSBAH_20_GLOBAL_INTERFACE;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.PSBAH_20_GLOBAL_INTERFACE_AK_ADJUSTED;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.SADIGH_97;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.SADIGH_97_AK_INTERFACE;
+import static gov.usgs.earthquake.nshmp.gmm.Gmm.SADIGH_97_PRVI_INTERFACE;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.SILVA_02;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.SOMERVILLE_01;
 import static gov.usgs.earthquake.nshmp.gmm.Gmm.TORO_97_MW;
@@ -483,7 +487,7 @@ class CombinedGmm implements GroundMotionModel {
       SADIGH_97, 0.25,
       CB_03_AK_FAULT, 0.25);
 
-  /* 2.0 */
+  /* 2.0 AK Active Crust */
   static final class AkActiveCrust2007 extends CombinedGmm {
 
     static final String NAME = CombinedGmm.NAME + "Alaska Active Crust 2007 (2.0)";
@@ -495,7 +499,7 @@ class CombinedGmm implements GroundMotionModel {
     }
   }
 
-  /* 3.0 Same as CONUS 2014 */
+  /* 3.0 AK Active Crust; same as CONUS 2014 */
   static final class AkActiveCrust2023 extends CombinedGmm {
 
     static final String NAME = CombinedGmm.NAME + "Alaska Active Crust 2023 (3.0)";
@@ -511,11 +515,11 @@ class CombinedGmm implements GroundMotionModel {
       GEOMATRIX_93_INTERFACE, 0.5,
       SADIGH_97_AK_INTERFACE, 0.5);
 
-  /* 2.0 Sadigh only used out to 70km; only Youngs 70 - 1000 km. */
+  /* 2.0 AK Interface. */
   static final class AkInterface2007 extends CombinedGmm {
 
     static final String NAME = CombinedGmm.NAME + "Alaska Interface 2007 (2.0)";
-    static final Constraints CONSTRAINTS = YoungsEtAl_1997.CONSTRAINTS;
+    static final Constraints CONSTRAINTS = Geomatrix_1993.CONSTRAINTS;
     static final CoefficientContainer COEFFS = SadighEtAl_1997.COEFFS_BC_HI;
 
     AkInterface2007(Imt imt) {
@@ -531,7 +535,7 @@ class CombinedGmm implements GroundMotionModel {
       PSBAH_20_GLOBAL_INTERFACE, 0.1667,
       PSBAH_20_GLOBAL_INTERFACE_AK_ADJUSTED, 0.1667);
 
-  /* 3.0 */
+  /* 3.0 AK Interface */
   static final class AkInterface2023 extends CombinedGmm {
 
     static final String NAME = CombinedGmm.NAME + "Alaska Interface 2023 (3.0)";
@@ -547,7 +551,7 @@ class CombinedGmm implements GroundMotionModel {
       AB_03_GLOBAL_SLAB, 0.5,
       GEOMATRIX_93_SLAB, 0.5);
 
-  /* 2.0 */
+  /* 2.0 AK Intraslab */
   static final class AkIntraslab2007 extends CombinedGmm {
 
     static final String NAME = CombinedGmm.NAME + "Alaska Intraslab 2007 (2.0)";
@@ -564,7 +568,7 @@ class CombinedGmm implements GroundMotionModel {
       KBCG_20_ALASKA_SLAB, 0.3333,
       PSBAH_20_ALASKA_SLAB, 0.3334);
 
-  /* 3.0 */
+  /* 3.0 AK Intraslab */
   static final class AkIntraslab2023 extends CombinedGmm {
 
     static final String NAME = CombinedGmm.NAME + "Alaska Intraslab 2023 (3.0)";
@@ -576,6 +580,25 @@ class CombinedGmm implements GroundMotionModel {
     }
   }
 
+  private static final Map<Gmm, Double> PRVI_ACTIVE_CRUST_2003 = Map.of(
+      MA_03, 0.1,
+      BJF_97, 0.225,
+      SADIGH_97, 0.225,
+      CB_03, 0.225,
+      AS_97_AK, 0.225);
+
+  /* 1.0 PRVI Active Crust */
+  static final class PrviActiveCrust2003 extends CombinedGmm {
+
+    static final String NAME = CombinedGmm.NAME + "PRVI Active Crust 2003 (1.0)";
+    static final Constraints CONSTRAINTS = AbrahamsonSilva_1997.CONSTRAINTS;
+    static final CoefficientContainer COEFFS = MotazedianAtkinson_2003.COEFFS;
+
+    PrviActiveCrust2003(Imt imt) {
+      super(imt, PRVI_ACTIVE_CRUST_2003);
+    }
+  }
+
   private static final Map<Gmm, Double> PRVI_ACTIVE_CRUST_2025 = Map.of(
       USGS_PRVI_ACTIVE_CRUST, 0.5,
       USGS_PRVI_ACTIVE_CRUST_ADJUSTED, 0.5);
@@ -592,11 +615,27 @@ class CombinedGmm implements GroundMotionModel {
     }
   }
 
+  private static final Map<Gmm, Double> PRVI_INTERFACE_2003 = Map.of(
+      GEOMATRIX_93_INTERFACE, 0.5,
+      SADIGH_97_PRVI_INTERFACE, 0.5);
+
+  /* 1.0 PRVI Interface */
+  static final class PrviInterface2003 extends CombinedGmm {
+
+    static final String NAME = CombinedGmm.NAME + "PRVI Interface 2003 (1.0)";
+    static final Constraints CONSTRAINTS = Geomatrix_1993.CONSTRAINTS;
+    static final CoefficientContainer COEFFS = SadighEtAl_1997.COEFFS_BC_HI;
+
+    PrviInterface2003(Imt imt) {
+      super(imt, PRVI_INTERFACE_2003);
+    }
+  }
+
   private static final Map<Gmm, Double> PRVI_INTERFACE_2025 = Map.of(
       USGS_PRVI_INTERFACE, 0.5,
       USGS_PRVI_INTERFACE_ADJUSTED, 0.5);
 
-  /* 2.0 PRVI Active Crust */
+  /* 2.0 PRVI Interface */
   static final class PrviInterface2025 extends CombinedGmm {
 
     static final String NAME = CombinedGmm.NAME + "PRVI Interface 2025 (2.0)";
@@ -608,11 +647,27 @@ class CombinedGmm implements GroundMotionModel {
     }
   }
 
+  private static final Map<Gmm, Double> PRVI_INTRASLAB_2003 = Map.of(
+      AB_03_GLOBAL_SLAB, 0.5,
+      GEOMATRIX_93_SLAB, 0.5);
+
+  /* 1.0 PRVI Intraslab */
+  static final class PrviIntraslab2003 extends CombinedGmm {
+
+    static final String NAME = CombinedGmm.NAME + "PRVI Intraslab 2007 (1.0)";
+    static final Constraints CONSTRAINTS = AtkinsonBoore_2003.CONSTRAINTS;
+    static final CoefficientContainer COEFFS = Geomatrix_1993.COEFFS;
+
+    PrviIntraslab2003(Imt imt) {
+      super(imt, PRVI_INTRASLAB_2003);
+    }
+  }
+
   private static final Map<Gmm, Double> PRVI_INTRASLAB_2025 = Map.of(
       USGS_PRVI_INTRASLAB, 0.5,
       USGS_PRVI_INTRASLAB_ADJUSTED, 0.5);
 
-  /* 2.0 PRVI Active Crust */
+  /* 2.0 PRVI Intraslab */
   static final class PrviIntraslab2025 extends CombinedGmm {
 
     static final String NAME = CombinedGmm.NAME + "PRVI Intraslab 2025 (2.0)";
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/Gmm.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/Gmm.java
index f21baae823cff9967af8e250e936746ac0ce8314..67e3b56c722e31ae0f7f8cd1f5cd2c1c5946c8f8 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/Gmm.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/Gmm.java
@@ -53,6 +53,12 @@ public enum Gmm {
    * argument.
    */
 
+  MA_03(
+      MotazedianAtkinson_2003.class,
+      MotazedianAtkinson_2003.NAME,
+      MotazedianAtkinson_2003.COEFFS,
+      MotazedianAtkinson_2003.CONSTRAINTS),
+
   MA_05_BASE(
       MotazedianAtkinson_2005.class,
       MotazedianAtkinson_2005.NAME,
@@ -401,6 +407,20 @@ public enum Gmm {
       SadighEtAl_1997.COEFFS_BC_HI,
       SadighEtAl_1997.CONSTRAINTS),
 
+  /** @see SadighEtAl_1997 */
+  SADIGH_97_PRVI_INTERFACE(
+      SadighEtAl_1997.PrviInterface.class,
+      SadighEtAl_1997.PrviInterface.NAME,
+      SadighEtAl_1997.COEFFS_BC_HI,
+      SadighEtAl_1997.CONSTRAINTS),
+
+  /* PRVI 2003 */
+  SPUDICH_99_PRVI(
+      SpudichEtAl_1999_PRVI.class,
+      SpudichEtAl_1999_PRVI.NAME,
+      SpudichEtAl_1999_PRVI.COEFFS,
+      SpudichEtAl_1999_PRVI.CONSTRAINTS),
+
   /* Subduction Interface and Slab WUS 2008 2014 2018, AK 2007 */
 
   /** @see AtkinsonBoore_2003 */
@@ -1563,13 +1583,6 @@ public enum Gmm {
       UsgsPrviBackbone2025.COEFFS_SIGMA_SUBDUCTION,
       UsgsPrviBackbone2025.SlabTotal.CONSTRAINTS),
 
-  /* PRVI 2003 */
-  SEA99_PRVI(
-      SpudichEtAl_1999_PRVI.class,
-      SpudichEtAl_1999_PRVI.NAME,
-      SpudichEtAl_1999_PRVI.COEFFS,
-      SpudichEtAl_1999_PRVI.CONSTRAINTS),
-
   /* Combined: must be declared after any dependent models above. */
 
   /** 2021 Hawaii weight-averaged GMM for deep earthquakes. */
@@ -1736,6 +1749,13 @@ public enum Gmm {
       CombinedGmm.AkIntraslab2023.COEFFS,
       CombinedGmm.AkIntraslab2023.CONSTRAINTS),
 
+  /** 2003 PRVI active crust weight-averaged GMM. */
+  COMBINED_PRVI_ACTIVE_CRUST_2003(
+      CombinedGmm.PrviActiveCrust2003.class,
+      CombinedGmm.PrviActiveCrust2003.NAME,
+      CombinedGmm.PrviActiveCrust2003.COEFFS,
+      CombinedGmm.PrviActiveCrust2003.CONSTRAINTS),
+
   /** 2025 PRVI active crust weight-averaged GMM. */
   COMBINED_PRVI_ACTIVE_CRUST_2025(
       CombinedGmm.PrviActiveCrust2025.class,
@@ -1743,6 +1763,13 @@ public enum Gmm {
       CombinedGmm.PrviActiveCrust2025.COEFFS,
       CombinedGmm.PrviActiveCrust2025.CONSTRAINTS),
 
+  /** 2003 PRVI interface weight-averaged GMM. */
+  COMBINED_PRVI_INTERFACE_2003(
+      CombinedGmm.PrviInterface2003.class,
+      CombinedGmm.PrviInterface2003.NAME,
+      CombinedGmm.PrviInterface2003.COEFFS,
+      CombinedGmm.PrviInterface2003.CONSTRAINTS),
+
   /** 2025 PRVI interface weight-averaged GMM. */
   COMBINED_PRVI_INTERFACE_2025(
       CombinedGmm.PrviInterface2025.class,
@@ -1750,6 +1777,13 @@ public enum Gmm {
       CombinedGmm.PrviInterface2025.COEFFS,
       CombinedGmm.PrviInterface2025.CONSTRAINTS),
 
+  /** 2003 PRVI intraslab weight-averaged GMM. */
+  COMBINED_PRVI_INTRASLAB_2003(
+      CombinedGmm.PrviIntraslab2003.class,
+      CombinedGmm.PrviIntraslab2003.NAME,
+      CombinedGmm.PrviIntraslab2003.COEFFS,
+      CombinedGmm.PrviIntraslab2003.CONSTRAINTS),
+
   /** 2025 PRVI intraslab weight-averaged GMM. */
   COMBINED_PRVI_INTRASLAB_2025(
       CombinedGmm.PrviIntraslab2025.class,
@@ -1945,8 +1979,17 @@ public enum Gmm {
 
   public enum Group {
 
+    PRVI_03_ACTIVE_CRUST(
+        "2003 PRVI Active Crust",
+        List.of(
+            MA_03,
+            BJF_97_AK,
+            SADIGH_97,
+            CB_03_AK_FAULT,
+            AS_97_AK)),
+
     PRVI_25_ACTIVE_CRUST(
-        "2025 PRVI Active Crust (beta)",
+        "2025 PRVI Active Crust",
         List.of(
             USGS_PRVI_ACTIVE_CRUST,
             USGS_PRVI_ACTIVE_CRUST_ADJUSTED,
@@ -1959,8 +2002,14 @@ public enum Gmm {
             CB_14_PRVI,
             CY_14_PRVI)),
 
+    PRVI_03_INTERFACE(
+        "2003 PRVI Interface",
+        List.of(
+            GEOMATRIX_93_INTERFACE,
+            SADIGH_97_PRVI_INTERFACE)),
+
     PRVI_25_INTERFACE(
-        "2025 PRVI Interface (beta)",
+        "2025 PRVI Interface",
         List.of(
             USGS_PRVI_INTERFACE,
             USGS_PRVI_INTERFACE_ADJUSTED,
@@ -1971,8 +2020,14 @@ public enum Gmm {
             KBCG_20_PRVI_INTERFACE,
             PSBAH_20_PRVI_INTERFACE)),
 
+    PRVI_03_SLAB(
+        "2025 PRVI Intraslab",
+        List.of(
+            GEOMATRIX_93_SLAB,
+            AB_03_GLOBAL_SLAB)),
+
     PRVI_25_SLAB(
-        "2025 PRVI Intraslab (beta)",
+        "2025 PRVI Intraslab",
         List.of(
             USGS_PRVI_INTRASLAB,
             USGS_PRVI_INTRASLAB_ADJUSTED,
@@ -2289,6 +2344,7 @@ public enum Gmm {
             COMBINED_ACTIVE_CRUST_2023_SAN_FRANCISCO,
             COMBINED_AK_ACTIVE_CRUST_2007,
             COMBINED_AK_ACTIVE_CRUST_2023,
+            COMBINED_PRVI_ACTIVE_CRUST_2003,
             COMBINED_PRVI_ACTIVE_CRUST_2025)),
 
     COMBINED_STABLE_CRUST(
@@ -2306,6 +2362,7 @@ public enum Gmm {
             COMBINED_INTERFACE_2023_SEATTLE,
             COMBINED_AK_INTERFACE_2007,
             COMBINED_AK_INTERFACE_2023,
+            COMBINED_PRVI_INTERFACE_2003,
             COMBINED_PRVI_INTERFACE_2025)),
 
     COMBINED_SLAB(
@@ -2316,6 +2373,7 @@ public enum Gmm {
             COMBINED_INTRASLAB_2023_SEATTLE,
             COMBINED_AK_INTRASLAB_2007,
             COMBINED_AK_INTRASLAB_2023,
+            COMBINED_PRVI_INTRASLAB_2003,
             COMBINED_PRVI_INTRASLAB_2025)),
 
     NGA_EAST(
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/MotazedianAtkinson_2003.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/MotazedianAtkinson_2003.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd4b6cafa46e2aa8409b1465cc62579c9de3cb4d
--- /dev/null
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/MotazedianAtkinson_2003.java
@@ -0,0 +1,131 @@
+package gov.usgs.earthquake.nshmp.gmm;
+
+import static gov.usgs.earthquake.nshmp.gmm.GmmInput.Field.MW;
+import static gov.usgs.earthquake.nshmp.gmm.GmmInput.Field.RRUP;
+import static gov.usgs.earthquake.nshmp.gmm.GmmInput.Field.VS30;
+import static gov.usgs.earthquake.nshmp.gmm.GmmUtils.BASE_10_TO_E;
+import static gov.usgs.earthquake.nshmp.gmm.GmmUtils.LN_G_CM_TO_M;
+import static java.lang.Math.log10;
+import static java.lang.Math.sqrt;
+
+import java.util.Map;
+
+import com.google.common.collect.Range;
+
+import gov.usgs.earthquake.nshmp.gmm.GmmInput.Constraints;
+import gov.usgs.earthquake.nshmp.tree.LogicTree;
+
+/**
+ * Implementation of the preliminary MA05 model that was used for PRVI.
+ * Functional form is the same as MA05 with diffeent coefficients and constants.
+ * Coefficients were gleaned from forttran codes and only three IMTs are
+ * supported (PGA, 0.2 s, and 1 s).
+ *
+ * <p><b>Component:</b> not specified (avg horizontal implied)
+ *
+ * @author U.S. Geological Survey
+ * @see MotazedianAtkinson_2005
+ * @see Gmm#MA_03_PRVI
+ */
+public class MotazedianAtkinson_2003 implements GroundMotionModel {
+
+  static final String NAME = "Motazedian & Atkinson (2003) PRVI Preliminary";
+
+  static final Constraints CONSTRAINTS = Constraints.builder()
+      .set(MW, Range.closed(4.0, 9.5))
+      .set(RRUP, Range.closed(0.0, 1000.0))
+      .set(VS30, Range.closedOpen(150.0, 1500.0))
+      .build();
+
+  static final CoefficientContainer COEFFS =
+      new CoefficientContainer("MotazedianAtkinson03.csv");
+
+  // distance centering coefficients
+  private static final double C5 = -7.333;
+  private static final double C6 = 2.333;
+  // hinge function coefficients
+  private static final double C7 = -1.88;
+  private static final double C8 = 0.14;
+  private static final double DIST_HINGE_LOWER = 75.0;
+  private static final double DIST_HINGE_UPPER = 100.0;
+
+  // convert log10 sigma to ln
+  private static final double SIGMA = 0.28 * BASE_10_TO_E;
+
+  private static final class Coefficients {
+
+    final Imt imt;
+    final double c1, c2, c3, c4;
+
+    Coefficients(Imt imt, CoefficientContainer cc) {
+      this.imt = imt;
+      Map<String, Double> coeffs = cc.get(imt);
+      c1 = coeffs.get("c1");
+      c2 = coeffs.get("c2");
+      c3 = coeffs.get("c3");
+      c4 = coeffs.get("c4");
+    }
+  }
+
+  private final Coefficients coeffs;
+
+  MotazedianAtkinson_2003(Imt imt) {
+    coeffs = new Coefficients(imt, COEFFS);
+  }
+
+  @Override
+  public Imt imt() {
+    return coeffs.imt;
+  }
+
+  @Override
+  public LogicTree<GroundMotion> calc(GmmInput in) {
+    return calc(coeffs, in);
+  }
+
+  private static LogicTree<GroundMotion> calc(
+      Coefficients c,
+      GmmInput in) {
+
+    double μ = calcMean(c, in.rRup, in.Mw);
+    return GroundMotions.createTree(μ, SIGMA);
+  }
+
+  private static final double calcMean(
+      Coefficients c,
+      double rRup,
+      double Mw) {
+
+    /* Eq. 6, log10(PSA) in cm/s/s */
+
+    double r = getR(rRup, Mw);
+
+    double hingeFunction = getHingeFunction(r, Mw);
+
+    double μ = c.c1 + c.c2 * (Mw - 6) + c.c3 * (Mw - 6) * (Mw - 6) + hingeFunction + c.c4 * r;
+    // convert from base 10 to base e and from cm/s/s to g
+    return μ * BASE_10_TO_E - LN_G_CM_TO_M;
+  }
+
+  private static final double getR(double rRup, double Mw) {
+    // Equation and coefficients defined in Table 2 caption
+    double delta = C5 + C6 * Mw;
+    return sqrt(rRup * rRup + delta * delta);
+  }
+
+  private static final double getHingeFunction(double dist, double Mw) {
+    // Equation and coefficients defined in Table 2 caption
+    double mFac = C7 + C8 * Mw;
+    if (dist <= DIST_HINGE_LOWER) {
+      // R <= 75 km
+      return mFac * log10(dist);
+    } else if (dist <= DIST_HINGE_UPPER) {
+      // 75 km < R <= 100 km
+      return mFac * log10(DIST_HINGE_LOWER);
+    } else {
+      // R >= 100 km
+      return mFac * log10(DIST_HINGE_LOWER) - 0.5 * log10(dist / DIST_HINGE_UPPER);
+    }
+  }
+
+}
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/SadighEtAl_1997.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/SadighEtAl_1997.java
index 2d62b5a66805b06e260c398c4c7be2c7951b82d5..dc94ce348847db70fe0665819c073582b84e5573 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/SadighEtAl_1997.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/SadighEtAl_1997.java
@@ -254,4 +254,46 @@ public class SadighEtAl_1997 implements GroundMotionModel {
     }
   }
 
+  /*
+   * Custom version of model for use with the 2003 PRVI NSHM where the GMM logic
+   * tree changes from 50/50 YOUNGS_97_INTERFACE/SADIGH_97 to 100%
+   * YOUNGS_97_INTERFACE at 58km (out to 1000km). This variant returns ground
+   * motions for YOUNGS_97_INTERFACE when rRup > 58 km, obviating the need for a
+   * distance dependent GMM logic tree.
+   */
+  static final class PrviInterface extends SadighEtAl_1997 {
+
+    static final String NAME = SadighEtAl_1997.NAME + " : PRVI : Interface";
+
+    private final Geomatrix_1993.Interface delegate;
+
+    PrviInterface(Imt imt) {
+      super(imt);
+      delegate = (Geomatrix_1993.Interface) GEOMATRIX_93_INTERFACE.instance(imt);
+    }
+
+    @Override
+    public final LogicTree<GroundMotion> calc(GmmInput in) {
+      if (in.rRup > 58.0) {
+        return delegate.calc(in);
+      }
+      return super.calc(in);
+    }
+
+    @Override
+    double calcRockMean(
+        Coefficients c,
+        double Mw,
+        double rRup,
+        FaultStyle style) {
+
+      /*
+       * We know interface events have a reverse rake. The Sadigh GMM as
+       * published includes a scale factor for reverse events, but it is not
+       * applied in the PRVI 2003 NSHM on the megathrust so we subtract it here.
+       */
+      return super.calcRockMean(c, Mw, rRup, style) - 0.18232;
+    }
+  }
+
 }
diff --git a/src/main/resources/gmm/coeffs/MotazedianAtkinson03.csv b/src/main/resources/gmm/coeffs/MotazedianAtkinson03.csv
new file mode 100644
index 0000000000000000000000000000000000000000..686974e5816115789b2a327288884403fb2c8f0c
--- /dev/null
+++ b/src/main/resources/gmm/coeffs/MotazedianAtkinson03.csv
@@ -0,0 +1,4 @@
+T,     c1,       c2,        c3,        c4
+PGA, 3.87,  0.39062,  -0.11289,  -0.00213
+0.2, 4.33,  0.38815,  -0.13977,  -0.00189
+1,   3.40,  0.64818,  -0.15222,  -0.00091
diff --git a/src/test/java/gov/usgs/earthquake/nshmp/gmm/SEA99_test.java b/src/test/java/gov/usgs/earthquake/nshmp/gmm/SEA99_test.java
index a5c358926cd2bb12431187a6502363dee205679c..bad18276049a55e8f07ec089424dc1565dceb144 100644
--- a/src/test/java/gov/usgs/earthquake/nshmp/gmm/SEA99_test.java
+++ b/src/test/java/gov/usgs/earthquake/nshmp/gmm/SEA99_test.java
@@ -1,6 +1,6 @@
 package gov.usgs.earthquake.nshmp.gmm;
 
-import static gov.usgs.earthquake.nshmp.gmm.Gmm.SEA99_PRVI;
+import static gov.usgs.earthquake.nshmp.gmm.Gmm.SPUDICH_99_PRVI;
 import static gov.usgs.earthquake.nshmp.gmm.Imt.PGA;
 import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P1;
 import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P5;
@@ -35,7 +35,7 @@ public class SEA99_test implements ArgumentsProvider {
   }
 
   /* Result generation sets */
-  private static Set<Gmm> gmms = EnumSet.of(SEA99_PRVI);
+  private static Set<Gmm> gmms = EnumSet.of(SPUDICH_99_PRVI);
 
   // private static Set<Imt> imts = SpudichEtAl_1999_PRVI.COEFFS.imts();
   private static Set<Imt> imts = EnumSet.of(PGA, SA0P1, SA0P5, SA2P0);
diff --git a/src/test/resources/gmm/sea99-results.csv b/src/test/resources/gmm/sea99-results.csv
index 64c63bc08ad8956a9cdf224bda34b2cd59da0702..a232470033c572460599873ed9770ac69e510d70 100644
--- a/src/test/resources/gmm/sea99-results.csv
+++ b/src/test/resources/gmm/sea99-results.csv
@@ -1,24 +1,24 @@
-0-SEA99_PRVI-PGA,0.1897430161,0.2240000000
-1-SEA99_PRVI-PGA,0.0174183111,0.2240000000
-2-SEA99_PRVI-PGA,0.3214887646,0.2240000000
-3-SEA99_PRVI-PGA,0.0295125030,0.2240000000
-4-SEA99_PRVI-PGA,0.5447105663,0.2240000000
-5-SEA99_PRVI-PGA,0.0500041494,0.2240000000
-0-SEA99_PRVI-SA0P1,0.3262097462,0.2950000000
-1-SEA99_PRVI-SA0P1,0.0282558510,0.2950000000
-2-SEA99_PRVI-SA0P1,0.6926230371,0.2950000000
-3-SEA99_PRVI-SA0P1,0.0599940792,0.2950000000
-4-SEA99_PRVI-SA0P1,0.9364766051,0.2950000000
-5-SEA99_PRVI-SA0P1,0.0811163484,0.2950000000
-0-SEA99_PRVI-SA0P5,0.2191634575,0.2750000000
-1-SEA99_PRVI-SA0P5,0.0190970592,0.2750000000
-2-SEA99_PRVI-SA0P5,0.5306010965,0.2750000000
-3-SEA99_PRVI-SA0P5,0.0462345351,0.2750000000
-4-SEA99_PRVI-SA0P5,1.0734161944,0.2750000000
-5-SEA99_PRVI-SA0P5,0.0935333512,0.2750000000
-0-SEA99_PRVI-SA2P0,0.0364705131,0.3410000000
-1-SEA99_PRVI-SA2P0,0.0031015763,0.3410000000
-2-SEA99_PRVI-SA2P0,0.1078802324,0.3410000000
-3-SEA99_PRVI-SA2P0,0.0091745013,0.3410000000
-4-SEA99_PRVI-SA2P0,0.2691174589,0.3410000000
-5-SEA99_PRVI-SA2P0,0.0228866625,0.3410000000
+0-SPUDICH_99_PRVI-PGA,0.1897430161,0.2240000000
+1-SPUDICH_99_PRVI-PGA,0.0174183111,0.2240000000
+2-SPUDICH_99_PRVI-PGA,0.3214887646,0.2240000000
+3-SPUDICH_99_PRVI-PGA,0.0295125030,0.2240000000
+4-SPUDICH_99_PRVI-PGA,0.5447105663,0.2240000000
+5-SPUDICH_99_PRVI-PGA,0.0500041494,0.2240000000
+0-SPUDICH_99_PRVI-SA0P1,0.3262097462,0.2950000000
+1-SPUDICH_99_PRVI-SA0P1,0.0282558510,0.2950000000
+2-SPUDICH_99_PRVI-SA0P1,0.6926230371,0.2950000000
+3-SPUDICH_99_PRVI-SA0P1,0.0599940792,0.2950000000
+4-SPUDICH_99_PRVI-SA0P1,0.9364766051,0.2950000000
+5-SPUDICH_99_PRVI-SA0P1,0.0811163484,0.2950000000
+0-SPUDICH_99_PRVI-SA0P5,0.2191634575,0.2750000000
+1-SPUDICH_99_PRVI-SA0P5,0.0190970592,0.2750000000
+2-SPUDICH_99_PRVI-SA0P5,0.5306010965,0.2750000000
+3-SPUDICH_99_PRVI-SA0P5,0.0462345351,0.2750000000
+4-SPUDICH_99_PRVI-SA0P5,1.0734161944,0.2750000000
+5-SPUDICH_99_PRVI-SA0P5,0.0935333512,0.2750000000
+0-SPUDICH_99_PRVI-SA2P0,0.0364705131,0.3410000000
+1-SPUDICH_99_PRVI-SA2P0,0.0031015763,0.3410000000
+2-SPUDICH_99_PRVI-SA2P0,0.1078802324,0.3410000000
+3-SPUDICH_99_PRVI-SA2P0,0.0091745013,0.3410000000
+4-SPUDICH_99_PRVI-SA2P0,0.2691174589,0.3410000000
+5-SPUDICH_99_PRVI-SA2P0,0.0228866625,0.3410000000