diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonEtAl_2014.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonEtAl_2014.java
index bab0c00bbb64e8a32118da9885e71ff967b8478b..0bc376f05abd3a748cf37c431adfb69a424e9121 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonEtAl_2014.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonEtAl_2014.java
@@ -56,6 +56,7 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree;
  * @see Gmm#ASK_14_BASIN
  * @see Gmm#ASK_14_CYBERSHAKE
  * @see Gmm#ASK_14_VS30_MEASURED
+ * @see Gmm#ASK_14_PRVI
  */
 public class AbrahamsonEtAl_2014 implements GroundMotionModel {
 
@@ -72,8 +73,13 @@ public class AbrahamsonEtAl_2014 implements GroundMotionModel {
       .set(Z1P0, Range.closed(0.0, 3.0))
       .build();
 
-  static final CoefficientContainer COEFFS = new CoefficientContainer("ASK14.csv");
-  static final CoefficientContainer COEFFS_PRVI = new CoefficientContainer("ASK14_PRVI.csv");
+  static final CoefficientContainer COEFFS;
+  static final CoefficientContainer COEFFS_PRVI;
+
+  static {
+    COEFFS = new CoefficientContainer("ASK14.csv");
+    COEFFS_PRVI = new CoefficientContainer("ASK14_PRVI.csv");
+  }
 
   private static final double A3 = 0.275;
   private static final double A4 = -0.1;
@@ -120,11 +126,11 @@ public class AbrahamsonEtAl_2014 implements GroundMotionModel {
       this.imt = imt;
       Map<String, Double> coeffs = COEFFS.get(imt);
 
-      a1 = coeffs.get("a1");
+      a1 = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("a1");
       a2 = coeffs.get("a2");
       a6 = coeffs.get("a6");
       a8 = coeffs.get("a8");
-      a10 = coeffs.get("a10");
+      a10 = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("a10");
       a12 = coeffs.get("a12");
       a13 = coeffs.get("a13");
       a15 = coeffs.get("a15");
@@ -463,6 +469,8 @@ public class AbrahamsonEtAl_2014 implements GroundMotionModel {
   }
 
   static final class Prvi extends AbrahamsonEtAl_2014 {
+    static final String NAME = AbrahamsonEtAl_2014.NAME + " : PRVI";
+
     Prvi(Imt imt) {
       super(imt, true);
     }
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/BooreEtAl_2014.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/BooreEtAl_2014.java
index a5d695a6e5bdbaa91e871f2b97d3ccaeb9b61f07..05ff3b74b3df1fd7fc22663ccfb0b171c8175efb 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/BooreEtAl_2014.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/BooreEtAl_2014.java
@@ -52,6 +52,7 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree;
  * @see Gmm#BSSA_14
  * @see Gmm#BSSA_14_BASIN
  * @see Gmm#BSSA_14_CYBERSHAKE
+ * @see Gmm#BSSA_14_PRVI
  */
 public class BooreEtAl_2014 implements GroundMotionModel {
 
@@ -66,8 +67,13 @@ public class BooreEtAl_2014 implements GroundMotionModel {
       .set(Z1P0, Range.closed(0.0, 3.0))
       .build();
 
-  static final CoefficientContainer COEFFS = new CoefficientContainer("BSSA14.csv");
-  static final CoefficientContainer COEFFS_PRVI = new CoefficientContainer("BSSA14_PRVI.csv");
+  static final CoefficientContainer COEFFS;
+  static final CoefficientContainer COEFFS_PRVI;
+
+  static {
+    COEFFS = new CoefficientContainer("BSSA14.csv");
+    COEFFS_PRVI = new CoefficientContainer("BSSA14_PRVI.csv");
+  }
 
   private static final double A = pow(570.94, 4);
   private static final double B = pow(1360, 4) + A;
@@ -100,10 +106,10 @@ public class BooreEtAl_2014 implements GroundMotionModel {
       this.imt = imt;
       Map<String, Double> coeffs = COEFFS.get(imt);
 
-      e0 = coeffs.get("e0");
-      e1 = coeffs.get("e1");
-      e2 = coeffs.get("e2");
-      e3 = coeffs.get("e3");
+      e0 = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("e0");
+      e1 = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("e1");
+      e2 = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("e2");
+      e3 = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("e3");
       e4 = coeffs.get("e4");
       e5 = coeffs.get("e5");
       e6 = coeffs.get("e6");
@@ -112,7 +118,7 @@ public class BooreEtAl_2014 implements GroundMotionModel {
       c2 = coeffs.get("c2");
       c3 = coeffs.get("c3");
       h = coeffs.get("h");
-      c = coeffs.get("c");
+      c = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("c");
       Vc = coeffs.get("Vc");
       f4 = coeffs.get("f4");
       f5 = coeffs.get("f5");
@@ -347,6 +353,8 @@ public class BooreEtAl_2014 implements GroundMotionModel {
   }
 
   static final class Prvi extends BooreEtAl_2014 {
+    static final String NAME = BooreEtAl_2014.NAME + " : PRVI";
+
     Prvi(Imt imt) {
       super(imt, true);
     }
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2014.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2014.java
index f439051126e021f55c6eb8bae3488c21f737c8ef..be95165a5ff94d4e1ff4942e1bf778db826df89b 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2014.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2014.java
@@ -62,21 +62,12 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree;
  * @see Gmm#CB_14
  * @see Gmm#CB_14_BASIN
  * @see Gmm#CB_14_CYBERSHAKE
+ * @see Gmm#CB_14_PRVI
  */
 public class CampbellBozorgnia_2014 implements GroundMotionModel {
 
   static final String NAME = "Campbell & Bozorgnia (2014)";
 
-  static final CoefficientContainer COEFFS = new CoefficientContainer("CB14.csv");
-  static final CoefficientContainer COEFFS_PRVI = new CoefficientContainer("CB14_PRVI.csv");
-
-  /*
-   * Developer notes:
-   *
-   * CB14 has rake dependent magnitude range restrictions
-   *
-   * Recommended dip range is actually 15-90°
-   */
   static final Constraints CONSTRAINTS = Constraints.builder()
       .set(MW, Range.closed(3.3, 8.5))
       .setDistances(300.0)
@@ -89,6 +80,14 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel {
       .set(Z2P5, Range.closed(0.0, 10.0))
       .build();
 
+  static final CoefficientContainer COEFFS;
+  static final CoefficientContainer COEFFS_PRVI;
+
+  static {
+    COEFFS = new CoefficientContainer("CB14.csv");
+    COEFFS_PRVI = new CoefficientContainer("CB14_PRVI.csv");
+  }
+
   private static final double H4 = 1.0;
   private static final double C = 1.88;
   private static final double N = 1.18;
@@ -119,7 +118,7 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel {
       this.imt = imt;
       Map<String, Double> coeffs = COEFFS.get(imt);
 
-      c0 = coeffs.get("c0");
+      c0 = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("c0");
       c1 = coeffs.get("c1");
       c2 = coeffs.get("c2");
       c3 = coeffs.get("c3");
@@ -129,7 +128,7 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel {
       c7 = coeffs.get("c7");
       c9 = coeffs.get("c9");
       c10 = coeffs.get("c10");
-      c11 = coeffs.get("c11");
+      c11 = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("c11");
       c14 = coeffs.get("c14");
       c16 = coeffs.get("c16");
       c17 = coeffs.get("c17");
@@ -498,6 +497,8 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel {
   }
 
   static final class Prvi extends CampbellBozorgnia_2014 {
+    static final String NAME = CampbellBozorgnia_2014.NAME + " : PRVI";
+
     Prvi(Imt imt) {
       super(imt, true);
     }
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/ChiouYoungs_2014.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/ChiouYoungs_2014.java
index 49979383b2cd2d09f4bf0dd6b9aa4f0ed66a7f3a..5f24c526f216b00932c139dd3ffc46cf2e7c1f20 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/ChiouYoungs_2014.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/ChiouYoungs_2014.java
@@ -61,12 +61,10 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree;
  * @see Gmm#CY_14_BASIN
  * @see Gmm#CY_14_CYBERSHAKE
  * @see Gmm#CY_14_VS30_MEASURED
+ * @see Gmm#CY_14_PRVI
  */
 public class ChiouYoungs_2014 implements GroundMotionModel {
 
-  // this model includes 0.12 and 0.17s periods that
-  // are not generally supported in other models
-
   static final String NAME = "Chiou & Youngs (2014)";
 
   static final Constraints CONSTRAINTS = Constraints.builder()
@@ -79,8 +77,13 @@ public class ChiouYoungs_2014 implements GroundMotionModel {
       .set(Z1P0, Range.closed(0.0, 3.0))
       .build();
 
-  static final CoefficientContainer COEFFS = new CoefficientContainer("CY14.csv");
-  static final CoefficientContainer COEFFS_PRVI = new CoefficientContainer("CY14_PRVI.csv");
+  static final CoefficientContainer COEFFS;
+  static final CoefficientContainer COEFFS_PRVI;
+
+  static {
+    COEFFS = new CoefficientContainer("CY14.csv");
+    COEFFS_PRVI = new CoefficientContainer("CY14_PRVI.csv");
+  }
 
   private static final double C2 = 1.06;
   private static final double C4 = -2.1;
@@ -117,7 +120,7 @@ public class ChiouYoungs_2014 implements GroundMotionModel {
       this.imt = imt;
       Map<String, Double> coeffs = COEFFS.get(imt);
 
-      c1 = coeffs.get("c1");
+      c1 = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("c1");
       c1a = coeffs.get("c1a");
       c1b = coeffs.get("c1b");
       c1c = coeffs.get("c1c");
@@ -137,7 +140,7 @@ public class ChiouYoungs_2014 implements GroundMotionModel {
       γ1 = coeffs.get("cgamma1");
       γ2 = coeffs.get("cgamma2");
       γ3 = coeffs.get("cgamma3");
-      φ1 = coeffs.get("phi1");
+      φ1 = (prvi ? COEFFS_PRVI.get(imt) : coeffs).get("phi1");
       φ2 = coeffs.get("phi2");
       φ3 = coeffs.get("phi3");
       φ4 = coeffs.get("phi4");
@@ -394,6 +397,8 @@ public class ChiouYoungs_2014 implements GroundMotionModel {
   }
 
   static final class Prvi extends ChiouYoungs_2014 {
+    static final String NAME = ChiouYoungs_2014.NAME + " : PRVI";
+
     Prvi(Imt imt) {
       super(imt, true);
     }