diff --git a/src/main/java/gov/usgs/earthquake/nshmp/site/NshmpSite.java b/src/main/java/gov/usgs/earthquake/nshmp/site/NshmpSite.java
index 00405f6d95f8aa7f57a5e2a35075266d9b71bea9..44a7e2960fec90dded35ae7761e02992e81546a3 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/site/NshmpSite.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/site/NshmpSite.java
@@ -303,7 +303,7 @@ public enum NshmpSite implements NamedLocation {
   YIGO_GU(144.9, 13.5),
   YONA_GU(144.8, 13.4),
 
-  /* Puerto Rico and U.S. Virgin Islands (16) */
+  /* Puerto Rico and U.S. Virgin Islands (86) */
   ADJUNTAS_PR(-66.7231, 18.1626),
   AGUADA_PR(-67.1888, 18.3797),
   AGUADILLA_PR(-67.1542, 18.4299),
@@ -507,12 +507,8 @@ public enum NshmpSite implements NamedLocation {
    * A restricted set of CEUS sites that is clipped at -105.5°.
    */
   public static EnumSet<NshmpSite> nrc() {
-    var coords = NshmpPolygon.CONUS_CLIP.coordinates();
     return filteredSet(
-        site -> site.location.longitude >= -105.5 &&
-            site.location.longitude <= coords.get(1).longitude &&
-            site.location.latitude >= coords.get(0).latitude &&
-            site.location.latitude <= coords.get(1).latitude);
+        site -> conus().contains(site) && site.location.longitude >= -105.5);
   }
 
   /**
@@ -570,75 +566,26 @@ public enum NshmpSite implements NamedLocation {
    * The set of CIAPR test sites in Puerto Rico
    */
   public static EnumSet<NshmpSite> ciapr() {
-    return EnumSet.of(
-        ADJUNTAS_PR,
-        AGUADA_PR,
-        AGUADILLA_PR,
-        AGUAS_BUENAS_PR,
-        AIBONITO_PR,
-        ARROYO_PR,
-        AÑASCO_PR,
-        BARCELONETA_PR,
-        BARRANQUITAS_PR,
-        CABO_ROJO_PR,
-        CAMUY_PR,
-        CANÓVANAS_PR,
-        CAROLINA_PR,
-        CATAÑO_PR,
-        CAYEY_PR,
-        CEIBA_PR,
-        CIALES_PR,
-        CIDRA_PR,
-        COAMO_PR,
-        COMERIO_PR,
-        COROZAL_PR,
-        DORADO_PR,
-        FLORIDA_PR,
-        GUAYAMA_PR,
-        GUAYANILLA_PR,
-        GUAYNABO_PR,
-        GURABO_PR,
-        GUÁNICA_PR,
-        HATILLO_PR,
-        HORMIGUEROS_PR,
-        HUMACAO_PR,
-        ISABELA_PR,
-        JAYUYA_PR,
-        JUANA_DÍAZ_PR,
-        JUNCOS_PR,
-        LAJAS_PR,
-        LARES_PR,
-        LAS_MARÍAS_PR,
-        LAS_PIEDRAS_PR,
-        LOÍZA_PR,
-        LUQUILLO_PR,
-        MANATÍ_PR,
-        MARICAO_PR,
-        MAUNABO_PR,
-        MOCA_PR,
-        MOROVIS_PR,
-        NAGUABO_PR,
-        NARANJITO_PR,
-        OROCOVIS_PR,
-        PATILLAS_PR,
-        PEÑUELAS_PR,
-        QUEBRADILLAS_PR,
-        RINCÓN_PR,
-        RÍO_GRANDE_PR,
-        SABANA_GRANDE_PR,
-        SALINAS_PR,
-        SAN_GERMÁN_PR,
-        SAN_LORENZO_PR,
-        SAN_SEBASTIAN_PR,
-        SANTA_ISABEL_PR,
-        TOA_ALTA_PR,
-        TOA_BAJA_PR,
-        TRUJILLO_ALTO_PR,
-        VEGA_ALTA_PR,
-        VEGA_BAJA_PR,
-        VIEQUES_PR,
-        VILLALBA_PR,
-        YAUCO_PR);
+    // exclude the non-CIAPR sites from PRVI sites
+    return filteredSet(site -> prvi().contains(site) &&
+        !EnumSet.of(ARECIBO_PR,
+            BAYAMÓN_PR,
+            CAGUAS_PR,
+            CULEBRA_PR,
+            FAJARDO_PR,
+            GUAJATACA_LAKE_PR,
+            ISABEL_II_PR,
+            MAYAGÃœEZ_PR,
+            PONCE_PR,
+            SAN_JUAN_ATC_PR,
+            SAN_JUAN_PR,
+            UTUADO_PR,
+            YABUCOA_PR,
+            BROOKMAN_VI,
+            CHARLOTTE_AMALIE_1_VI,
+            CHARLOTTE_AMALIE_2_VI,
+            CHRISTIANSTED_VI,
+            CRUZ_BAY_VI).contains(site));
   }
 
   static class StateComparator implements Comparator<NshmpSite> {
diff --git a/src/test/java/gov/usgs/earthquake/nshmp/site/NshmpSiteTests.java b/src/test/java/gov/usgs/earthquake/nshmp/site/NshmpSiteTests.java
index d6da4edd245eb088762d09055ff7a8054b2a36ab..c6cf80b72ef8c81f9e52c8cbbfcd3286cf3d0fcd 100644
--- a/src/test/java/gov/usgs/earthquake/nshmp/site/NshmpSiteTests.java
+++ b/src/test/java/gov/usgs/earthquake/nshmp/site/NshmpSiteTests.java
@@ -98,6 +98,21 @@ public class NshmpSiteTests {
         NshmpSite.hawaii(),
         EnumSet.range(NshmpSite.BARBERS_POINT_HI, NshmpSite.WAIPAHU_HI));
 
+    /* American Samoa */
+    assertEquals(
+        NshmpSite.amsam(),
+        EnumSet.range(NshmpSite.APIA_UPOLU_SAMOA_AS, NshmpSite.VAITOGI_AS));
+
+    /* Guam and Northern Mariana Islands */
+    assertEquals(
+        NshmpSite.gnmi(),
+        EnumSet.range(NshmpSite.ANDERSON_AFB_ATC_GU, NshmpSite.YONA_GU));
+
+    /* Puerto Rico and US Virgin Islands */
+    assertEquals(
+        NshmpSite.prvi(),
+        EnumSet.range(NshmpSite.ADJUNTAS_PR, NshmpSite.CRUZ_BAY_VI));
+
     /* NRC comparision sites */
     assertEquals(
         NshmpSite.nrc(),
@@ -106,7 +121,7 @@ public class NshmpSiteTests {
             new Predicate<NshmpSite>() {
               @Override
               public boolean test(NshmpSite site) {
-                return site.location().longitude >= -105.5;
+                return NshmpSite.conus().contains(site) && site.location().longitude >= -105.5;
               }
             }::test), NshmpSite.class));