diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8057fab4fca97805b696adcdfc27330701b03707..ca77c43ee01dd599bca1620d38d2cb4936451b3d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,12 +1,8 @@
 variables:
-  DATA_CONUS_2018A: conus-2018a
-  DATA_URL: ${S3_BUCKET}/nshmp_2018a_v1.1-CONUS-hazards-with-preliminary-PGV-fv0.3-1x1.nc
   IMAGE_NAME: ${CODE_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${ENVIRONMENT}-${CI_COMMIT_SHORT_SHA}
   JACOCO_HTML_DIR: ${REPORTS_DIR}/jacoco/test/html
   JUNIT_FILES: build/test-results/test/TEST-*.xml
   REPORTS_DIR: build/reports
-  # TODO: Remove hard coded url
-  S3_BUCKET: https://nshmp-netcdf-lp-development-rbucket-1of3d1x45yfd9.s3-us-west-2.amazonaws.com
 
 stages:
   - build
@@ -149,19 +145,14 @@ workflow:
 # Stage: build
 ####
 
-Build Image 2018:
-  before_script:
-    - apk add curl
-    - mkdir DATA
-    - curl -SL ${DATA_URL} -o DATA/data.nc
+Build Image:
   extends:
     - .docker-build
   variables:
     DOCKER_BUILD_ARGS: |
-      BUILD_IMAGE=${DEVOPS_REGISTRY}usgs/java:11
-      FROM_IMAGE=${DEVOPS_REGISTRY}usgs/java:11
+      BUILD_IMAGE=${DEVOPS_REGISTRY}usgs/amazoncorretto:11
+      FROM_IMAGE=${DEVOPS_REGISTRY}usgs/amazoncorretto:11
       ci_job_token=${CI_JOB_TOKEN}
-      netcdf_file=DATA/data.nc
     UPSTREAM_PATH: ghsc/nshmp/nshmp-ws-static
 
 Build Project:
@@ -201,7 +192,7 @@ YAML Lint:
 
 Trigger AWS Deployment:
   needs:
-    - Build Image 2018
+    - Build Image
   rules:
     -
       <<: *development-env
diff --git a/Dockerfile b/Dockerfile
index 17caddf098076e3f772b3b0f6c082fd2168ae12f..18dcb4524bfd113c55ff23e8b1cf0c924b1ca0fb 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,75 +5,42 @@
 #       -t nshmp-ws-static .
 ####
 
-ARG BUILD_IMAGE=usgs/java:11
-ARG FROM_IMAGE=usgs/java:11
+ARG BUILD_IMAGE=usgs/amazoncorretto:11
+ARG FROM_IMAGE=usgs/amazoncorretto:11
 
-ARG project=nshmp-ws-static
-ARG workdir=/app/${project}
-ARG libs_dir=${workdir}/build/libs
-ARG jar_file=${libs_dir}/${project}.jar
-
-####
-# Build war file
-####
 FROM ${BUILD_IMAGE} as builder
 
 ARG gitlab_token=null
 ARG ci_job_token=null
-ARG libs_dir
-ARG jar_file
-ARG workdir
 
 # TODO: Token needed until nshmp-lib is public
 ENV GITLAB_TOKEN ${gitlab_token}
 ENV CI_JOB_TOKEN ${ci_job_token}
 
-WORKDIR ${workdir}
+WORKDIR /app
 
-COPY build.gradle .
-COPY .git .git
-COPY gradle gradle
-COPY gradle.properties .
-COPY gradlew .
-COPY settings.gradle .
-COPY src src
-COPY openapi.properties .
+COPY . .
 
-RUN ./gradlew assemble \
-    && mv ${libs_dir}/*-all.jar ${jar_file}
+RUN ./gradlew assemble
 
 ####
 # Run service
 ####
 FROM ${FROM_IMAGE}
 
-# The NetCDF file to read in
-ARG netcdf_file="src/main/resources/default.nc"
-
-# The NSHM to use
-# Available NSHM to run:
-#   - CONUS_2018A
-ENV NSHM "CONUS_2018A"
-
+# Path to the NetCDF file to use
+ENV NETCDF_FILE src/main/resources/default.nc
 ENV CONTEXT_PATH "/"
 ENV JAVA_OPTS=""
 
-ARG jar_file
-ARG project
-ARG workdir
-
-ENV PROJECT ${project}
-ENV NETCDF_FILE ${netcdf_file}
-
-WORKDIR ${workdir}
+WORKDIR /app
 
-COPY --from=builder ${jar_file} ${project}.jar
-COPY ${NETCDF_FILE} ${NETCDF_FILE}
+COPY --from=builder /app/build/libs/nshmp-ws-static-all.jar nshmp-ws-static.jar
 
 ENTRYPOINT /usr/bin/java \
     ${JAVA_OPTS} \
     -jar \
-    ${PROJECT}.jar \
+    nshmp-ws-static.jar \
     "-Dmicronaut.server.context-path=${CONTEXT_PATH}" \
     -nshm=${NSHM} \
     -netcdf=${NETCDF_FILE}
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NshmGroup.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NshmGroup.java
deleted file mode 100644
index dea538a5a2b8d97faaab1297c40902c0d667bfd5..0000000000000000000000000000000000000000
--- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NshmGroup.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package gov.usgs.earthquake.nshmp.netcdf;
-
-import com.google.common.base.CaseFormat;
-
-public enum NshmGroup {
-
-  CONUS_2018A(
-      "2018 Conterminous U.S. NSHM",
-      "/CONUS/2018/v1.1",
-      2);
-
-  private final String display;
-  private final String baseGroup;
-  private final int locationPrecision;
-
-  private NshmGroup(String display, String baseGroup, int locationPrecision) {
-    this.display = display;
-    this.baseGroup = baseGroup;
-    this.locationPrecision = locationPrecision;
-  }
-
-  @Override
-  public String toString() {
-    return display;
-  }
-
-  public String model() {
-    return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, name());
-  }
-
-  /**
-   * Returns the NetCDF target base group to read.
-   */
-  public String baseGroup() {
-    return baseGroup;
-  }
-
-  /**
-   * Returns the spacing for the locations.
-   */
-  public int locationPrecision() {
-    return locationPrecision;
-  }
-
-}
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NshmNetcdfReader.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NshmNetcdfReader.java
index fc9df599fc2b6347f75bff6dbe45dce6eec84060..98600bf0d64d6187309f8461d920b2c830ae113b 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NshmNetcdfReader.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NshmNetcdfReader.java
@@ -46,7 +46,6 @@ public class NshmNetcdfReader {
   private static final Logger LOGGER = Logger.getLogger("ucar");
 
   private final Path path;
-  private final NshmGroup nshmGroup;
   private final NetcdfCoordinates coords;
 
   static {
@@ -54,8 +53,7 @@ public class NshmNetcdfReader {
     LOGGER.setLevel(Level.SEVERE);
   }
 
-  public NshmNetcdfReader(NshmGroup nshmGroup, Path path) {
-    this.nshmGroup = nshmGroup;
+  public NshmNetcdfReader(Path path) {
     this.path = path;
 
     if (Files.notExists(path)) {
@@ -63,24 +61,12 @@ public class NshmNetcdfReader {
     }
 
     try (var ncd = NetcdfDataset.openDataset(path.toString())) {
-      // TODO:
-      // - Handle metadata from netCDF file get root group and
-      // attributes, and attributes of subgroups
-      // - Get netCDF dimensions
-      var targetGroup = ncd.findGroup(nshmGroup.baseGroup());
-      coords = new NetcdfCoordinates(nshmGroup, targetGroup);
+      coords = new NetcdfCoordinates(ncd.getRootGroup());
     } catch (IOException e) {
       throw new RuntimeException("Could not read Netcdf file [" + path + " ]");
     }
   }
 
-  /**
-   * Returns the NSHM NetCDF group
-   */
-  public NshmGroup nshmGroup() {
-    return nshmGroup;
-  }
-
   /**
    * Returns the NetCDF dimensions and coordinate variables.
    */
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingHazardsReader.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingHazardsReader.java
index 20e1c38344cb1bb62723cbc7b87bb5887c8b987d..4953f9eeb796ab25afd1eb4161f51b791a2531d0 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingHazardsReader.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingHazardsReader.java
@@ -125,7 +125,7 @@ public class BoundingHazardsReader {
       int idxLatLL) {
     try (NetcdfDataset ncd = NetcdfDataset.openDataset(netcdf.path().toString())) {
       var boundingHazardMaps = BoundingHazards.builder();
-      var targetGroup = ncd.findGroup(netcdf.nshmGroup().baseGroup());
+      var targetGroup = ncd.getRootGroup();
 
       var targetOrigin = new int[] { 0, 0, idxLatLL, idxLonLL, 0 };
       var targetShape = new int[] {
@@ -175,7 +175,6 @@ public class BoundingHazardsReader {
       var imtHazardMap = StaticHazard.builder();
       for (int iImt = 0; iImt < coords.imts().size(); iImt++) {
         var imt = coords.imts().get(iImt);
-
         var origin = new int[] { iSiteClass, iImt, 0 };
         var shape = new int[] { 1, 1, coords.nIml() };
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfCoordinates.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfCoordinates.java
index c0620aec4b51d82030eceb3e17f02c70189a14c5..079d597712fcae71bf26e49af4f6cb64cdf1c0e2 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfCoordinates.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfCoordinates.java
@@ -12,6 +12,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.google.common.reflect.TypeToken;
+import com.google.gson.Gson;
+
 import gov.usgs.earthquake.nshmp.Maths;
 import gov.usgs.earthquake.nshmp.geo.BorderType;
 import gov.usgs.earthquake.nshmp.geo.Location;
@@ -24,7 +27,6 @@ import gov.usgs.earthquake.nshmp.geo.json.GeoJson;
 import gov.usgs.earthquake.nshmp.geo.json.Properties;
 import gov.usgs.earthquake.nshmp.gmm.Imt;
 import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
-import gov.usgs.earthquake.nshmp.netcdf.NshmGroup;
 import gov.usgs.earthquake.nshmp.netcdf.reader.NetcdfUtils.Key;
 
 import ucar.ma2.DataType;
@@ -47,7 +49,10 @@ public class NetcdfCoordinates {
   private final double[] longitudes;
   private final double[] latitudes;
 
-  public NetcdfCoordinates(NshmGroup nshmGroup, Group targetGroup) throws IOException {
+  private static final String FLAG_KEY = "flag_key";
+  private static final Gson GSON = new Gson();
+
+  public NetcdfCoordinates(Group targetGroup) throws IOException {
     // This bypasses the netCDF dimensions, but since we know what the
     // variables and their dimensions should be, this is OK(???)
     // TODO: probably better (proper) to access netCDF dimensions
@@ -61,24 +66,37 @@ public class NetcdfCoordinates {
     var lats = NetcdfUtils.getDoubleArray(targetGroup, Key.LAT);
     var lons = NetcdfUtils.getDoubleArray(targetGroup, Key.LON);
 
+    var mapTypeToken = new TypeToken<Map<String, String>>() {}.getType();
+
     // get list of SiteClass enums and build vs30 map
     List<NehrpSiteClass> scList = new ArrayList<NehrpSiteClass>();
     Map<NehrpSiteClass, Double> vsMap = new HashMap<NehrpSiteClass, Double>();
     var siteClassArray = vSiteClass.read();
+    Map<String, String> siteClassFlagKeys = GSON
+        .fromJson(vSiteClass.findAttribute(FLAG_KEY)
+            .getValues().toString(), mapTypeToken);
+
     for (int i = 0; i < vSiteClass.getSize(); i++) {
-      String scString = siteClassArray.getObject(i).toString();
+      var scInt = siteClassArray.getInt(i);
+      var scString = siteClassFlagKeys.get(Integer.toString(scInt)).toString();
       NehrpSiteClass siteClass = NehrpSiteClass.valueOf(scString);
       scList.add(siteClass);
       vsMap.put(siteClass, vs30s[i]);
     }
     siteClasses = List.copyOf(scList);
-    vs30Map = Collections.unmodifiableMap(vsMap);
+    vs30Map = Map.copyOf(vsMap);
 
     // get list of IMT enums
     List<Imt> imtList = new ArrayList<Imt>();
+    Map<String, String> imtFlagKeys = GSON
+        .fromJson(vImts.findAttribute(FLAG_KEY)
+            .getValues().toString(), mapTypeToken);
+
     var imtArray = vImts.read();
     for (int i = 0; i < vImts.getSize(); i++) {
-      imtList.add(Imt.valueOf(imtArray.getObject(i).toString()));
+      var imtInt = imtArray.getInt(i);
+      var imtString = imtFlagKeys.get(Integer.toString(imtInt)).toString();
+      imtList.add(Imt.valueOf(imtString));
     }
     imts = List.copyOf(imtList);
 
@@ -90,11 +108,13 @@ public class NetcdfCoordinates {
     imls = mapImls(vImls);
 
     latitudes = Arrays.stream(lats)
-        .map(lat -> Maths.round(lat, nshmGroup.locationPrecision()))
+        // TODO: Dynamic set location precision from NetCDF
+        .map(lat -> Maths.round(lat, 3))
         .toArray();
 
     longitudes = Arrays.stream(lons)
-        .map(lon -> Maths.round(lon, nshmGroup.locationPrecision()))
+        // TODO: Dynamic set location precision from NetCDF
+        .map(lon -> Maths.round(lon, 3))
         .toArray();
 
     /*
@@ -135,14 +155,14 @@ public class NetcdfCoordinates {
   }
 
   /**
-   * Returns the Imls associated with a {@code NshmGroup}.
+   * Returns the Imls
    */
   public Map<Imt, double[]> imls() {
     return imls;
   }
 
   /**
-   * Return the Imts associated with a {@code NshmGroup}.
+   * Return the Imts
    */
   public List<Imt> imts() {
     return List.copyOf(imts);
@@ -163,21 +183,21 @@ public class NetcdfCoordinates {
   }
 
   /**
-   * Returns the number of Imls associated with a {@code NshmGroup}.
+   * Returns the number of Imls
    */
   public int nIml() {
     return nIml;
   }
 
   /**
-   * Returns the region associated with a {@code NshmGroup}
+   * Returns the region
    */
   public Region region() {
     return Regions.copyOf(region);
   }
 
   /**
-   * Return the site classes associated with a {@code NshmGroup}.
+   * Return the site classes
    */
   public List<NehrpSiteClass> siteClasses() {
     return List.copyOf(siteClasses);
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java
index bab2dccdac8fd1d3a4c95a249839e44dae621d30..5a00fc8a2a557d07197e391ff8b2b36ec7f06eca 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java
@@ -4,7 +4,6 @@ import java.nio.file.Path;
 
 import gov.usgs.earthquake.nshmp.gmm.Imt;
 import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
-import gov.usgs.earthquake.nshmp.netcdf.NshmGroup;
 import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet;
 
 import io.micronaut.context.annotation.Value;
@@ -25,8 +24,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.inject.Inject;
 
 /**
- * Micronaut controller for getting static hazards for a specific
- * {@code NshmGroup} from a NetCDF file.
+ * Micronaut controller for getting static hazards form a NetCDF file.
  *
  * @see NetcdfService
  *
@@ -39,9 +37,6 @@ public class NetcdfController {
   @Inject
   private NshmpMicronautServlet servlet;
 
-  @Value("${nshmp-ws-static.nshm-group}")
-  NshmGroup nshmGroup;
-
   @Value("${nshmp-ws-static.netcdf-file}")
   Path path;
 
@@ -72,7 +67,7 @@ public class NetcdfController {
       @QueryValue @Nullable NehrpSiteClass siteClass,
       @QueryValue @Nullable Imt imt) {
     var query = new Query(longitude, latitude, siteClass, imt);
-    return NetcdfService.handleDoGet(request, nshmGroup, path, query);
+    return NetcdfService.handleDoGet(request, path, query);
   }
 
   /**
@@ -172,7 +167,7 @@ public class NetcdfController {
           schema = @Schema(type = "string")))
   @Get(uri = "/border", produces = MediaType.APPLICATION_JSON)
   public HttpResponse<String> doGetBorder(HttpRequest<?> request) {
-    return NetcdfService.handleDoGetBorder(request, nshmGroup, path);
+    return NetcdfService.handleDoGetBorder(request, path);
   }
 
   /**
@@ -189,7 +184,7 @@ public class NetcdfController {
       @Schema(required = true) @QueryValue @Nullable Double longitude,
       @Schema(required = true) @QueryValue @Nullable Double latitude) {
     var query = new Query(longitude, latitude, null, null);
-    return NetcdfService.handleDoGetBounding(request, nshmGroup, path, query);
+    return NetcdfService.handleDoGetBounding(request, path, query);
   }
 
   /**
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java
index d1ebeff41be24f4a82a10666388aabc9337a4db0..4f229cd69d297ffe361c90a998ae27595b282a6b 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java
@@ -14,7 +14,6 @@ import gov.usgs.earthquake.nshmp.geo.json.Feature;
 import gov.usgs.earthquake.nshmp.geo.json.GeoJson;
 import gov.usgs.earthquake.nshmp.gmm.Imt;
 import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
-import gov.usgs.earthquake.nshmp.netcdf.NshmGroup;
 import gov.usgs.earthquake.nshmp.netcdf.NshmNetcdfReader;
 import gov.usgs.earthquake.nshmp.netcdf.reader.BoundingHazards;
 import gov.usgs.earthquake.nshmp.netcdf.reader.StaticHazard;
@@ -40,27 +39,26 @@ public class NetcdfService {
 
   private static NshmNetcdfReader netcdf;
 
-  private static String SERVICE_NAME = "Netcdf NSHM Service for the %s";
-  private static String SERVICE_DESCRIPTION = "Get static hazard curves for the %s";
+  private static String SERVICE_NAME = "Netcdf NSHM Service for the";
+  private static String SERVICE_DESCRIPTION = "Get static hazard curves for";
 
   private static final Logger LOGGER = Logger.getLogger(NetcdfService.class.getName());
 
   static HttpResponse<String> handleDoGet(
       HttpRequest<?> request,
-      NshmGroup nshmGroup,
       Path path,
       Query query) {
-    SERVICE_NAME = String.format(SERVICE_NAME, nshmGroup.toString());
+    SERVICE_NAME = String.format(SERVICE_NAME);
     try {
-      setNetcdf(nshmGroup, path);
+      setNetcdf(path);
       var url = request.getUri().toString();
       LOGGER.info(SERVICE_NAME + " - Request: " + url);
       LOGGER.fine(SERVICE_NAME + " - Query:\n" + GSON.toJson(query));
 
       if (query.longitude == null && query.latitude == null) {
-        return metadata(request, nshmGroup, path);
+        return metadata(request, path);
       }
-      var service = getService(nshmGroup, path, query);
+      var service = getService(path, query);
       Response<?, ?> svcResponse = processRequest(request, netcdf, service, query);
       var response = GSON.toJson(svcResponse);
       LOGGER.fine(SERVICE_NAME + " - Result:\n" + response);
@@ -73,17 +71,15 @@ public class NetcdfService {
 
   static HttpResponse<String> handleDoGetBounding(
       HttpRequest<?> request,
-      NshmGroup nshmGroup,
       Path path,
       Query query) {
-    SERVICE_NAME = String.format(SERVICE_NAME, nshmGroup.toString());
+    SERVICE_NAME = String.format(SERVICE_NAME);
     try {
-      setNetcdf(nshmGroup, path);
-      // LOGGER.info(SERVICE_NAME + " - Request: " + urlHelper.url);
+      setNetcdf(path);
       LOGGER.fine(SERVICE_NAME + " - Query:\n" + GSON.toJson(query));
 
       if (query.longitude == null && query.latitude == null) {
-        return metadata(request, nshmGroup, path);
+        return metadata(request, path);
       }
       Response<?, ?> svcResponse = processRequest(request, netcdf, Service.BOUNDING, query);
       var response = GSON.toJson(svcResponse);
@@ -98,11 +94,10 @@ public class NetcdfService {
 
   static HttpResponse<String> handleDoGetBorder(
       HttpRequest<?> request,
-      NshmGroup nshmGroup,
       Path path) {
-    SERVICE_NAME = String.format(SERVICE_NAME, nshmGroup.toString());
+    SERVICE_NAME = String.format(SERVICE_NAME);
     try {
-      setNetcdf(nshmGroup, path);
+      setNetcdf(path);
       var geojson = GeoJson.builder();
       var border = netcdf.coordinates().region().border();
 
@@ -122,11 +117,11 @@ public class NetcdfService {
     }
   }
 
-  static HttpResponse<String> metadata(HttpRequest<?> request, NshmGroup nshmGroup, Path path) {
+  static HttpResponse<String> metadata(HttpRequest<?> request, Path path) {
     try {
-      setNetcdf(nshmGroup, path);
+      setNetcdf(path);
       String netcdfFile = path == null ? "" : path.toString();
-      var metadata = new Metadata(request, nshmGroup, netcdfFile);
+      var metadata = new Metadata(request, netcdfFile);
       var url = request.getUri().toString();
       var svcResponse =
           new Response<>(Status.USAGE, SERVICE_NAME, url, metadata, url);
@@ -139,7 +134,7 @@ public class NetcdfService {
     }
   }
 
-  static Service getService(NshmGroup nshmGroup, Path path, Query query) {
+  static Service getService(Path path, Query query) {
     if (query.siteClass != null && query.imt != null) {
       return Service.CURVES_BY_SITE_CLASS_IMT;
     } else if (query.siteClass != null && query.imt == null) {
@@ -181,7 +176,7 @@ public class NetcdfService {
     WsUtils.checkValue(Key.LATITUDE, request.site.latitude);
     WsUtils.checkValue(Key.LONGITUDE, request.site.longitude);
     var bounding = netcdf.boundingHazards(request.site);
-    var boundingAsList = toLists(netcdf.nshmGroup(), request.site, bounding);
+    var boundingAsList = toLists(request.site, bounding);
     return new Response<>(Status.SUCCESS, SERVICE_NAME, request, boundingAsList, url);
   }
 
@@ -191,7 +186,7 @@ public class NetcdfService {
     WsUtils.checkValue(Key.LATITUDE, request.site.latitude);
     WsUtils.checkValue(Key.LONGITUDE, request.site.longitude);
     var curves = netcdf.hazard(request.site);
-    var curvesAsList = toList(netcdf.nshmGroup(), request.site, curves);
+    var curvesAsList = toList(request.site, curves);
     return new Response<>(Status.SUCCESS, SERVICE_NAME, request, curvesAsList, url);
   }
 
@@ -202,7 +197,7 @@ public class NetcdfService {
     WsUtils.checkValue(Key.LONGITUDE, request.site.longitude);
     WsUtils.checkValue(Key.SITE_CLASS, request.siteClass);
     var curves = netcdf.hazard(request.site, request.siteClass);
-    var curvesAsList = toList(netcdf.nshmGroup(), request, curves);
+    var curvesAsList = toList(request, curves);
     return new Response<>(Status.SUCCESS, SERVICE_NAME, request, curvesAsList, url);
   }
 
@@ -216,43 +211,40 @@ public class NetcdfService {
 
     var site = request.site;
     var metadata = new ResponseMetadata(
-        netcdf.nshmGroup(), site.longitude, site.latitude, request.siteClass, request.imt);
+        site.longitude, site.latitude, request.siteClass, request.imt);
     var curve = netcdf.hazard(request.site, request.siteClass, request.imt);
     var responseData = new ResponseData(metadata, curve);
     return new Response<>(Status.SUCCESS, SERVICE_NAME, request, responseData, url);
   }
 
   static List<List<List<ResponseData>>> toLists(
-      NshmGroup nshmGroup,
       Location site,
       BoundingHazards bounding) {
 
     return bounding.entrySet().stream()
-        .map(entry -> toList(nshmGroup, site, entry.getValue()))
+        .map(entry -> toList(site, entry.getValue()))
         .collect(Collectors.toList());
   }
 
   static List<List<ResponseData>> toList(
-      NshmGroup nshmGroup,
       Location site,
       StaticHazards curves) {
     return curves.entrySet().stream()
         .map(entry -> {
           var request = new RequestDataCurves(site.longitude, site.latitude, entry.getKey());
-          return toList(nshmGroup, request, entry.getValue());
+          return toList(request, entry.getValue());
         })
         .collect(Collectors.toList());
   }
 
   static List<ResponseData> toList(
-      NshmGroup nshmGroup,
       RequestDataCurves request,
       StaticHazard curves) {
     return curves.entrySet().stream()
         .map((entry) -> {
           var site = request.site;
           var metadata = new ResponseMetadata(
-              nshmGroup, site.longitude, site.latitude, request.siteClass, entry.getKey());
+              site.longitude, site.latitude, request.siteClass, entry.getKey());
           return new ResponseData(metadata, entry.getValue());
         })
         .collect(Collectors.toList());
@@ -287,16 +279,13 @@ public class NetcdfService {
   static class ResponseMetadata extends RequestDataCurve {
     final String xLabel;
     final String yLabel;
-    final NshmGroup nshm;
 
     ResponseMetadata(
-        NshmGroup nshmGroup,
         double longitude,
         double latitude,
         NehrpSiteClass siteClass,
         Imt imt) {
       super(longitude, latitude, siteClass, imt);
-      nshm = nshmGroup;
       xLabel = "Ground Motion (g)";
       yLabel = "Annual Frequency of Exceedence";
     }
@@ -318,9 +307,9 @@ public class NetcdfService {
     final String[] syntax;
     final Parameters parameters;
 
-    Metadata(HttpRequest<?> request, NshmGroup nshmGroup, String netcdfFile) {
+    Metadata(HttpRequest<?> request, String netcdfFile) {
       var url = request.getUri().toString();
-      description = String.format(SERVICE_DESCRIPTION, nshmGroup.toString());
+      description = String.format(SERVICE_DESCRIPTION);
       syntax = new String[] {
           url + "/{longitude:number}/{latitude:number}",
           url + "?longitude={number}&latitude={number}",
@@ -336,14 +325,12 @@ public class NetcdfService {
 
   static class Parameters {
     final String netcdfFile;
-    final NshmGroup nshm;
     final Bounds bounds;
     final List<NehrpSiteClass> siteClasses;
     final List<Imt> imts;
 
     Parameters(String netcdfFile) {
       this.netcdfFile = netcdfFile;
-      nshm = netcdf.nshmGroup();
       var coordinates = netcdf.coordinates();
       bounds = coordinates.region().bounds();
       siteClasses = coordinates.siteClasses();
@@ -352,9 +339,9 @@ public class NetcdfService {
 
   }
 
-  private static void setNetcdf(NshmGroup nshmGroup, Path path) {
+  private static void setNetcdf(Path path) {
     if (netcdf == null) {
-      netcdf = new NshmNetcdfReader(nshmGroup, path);
+      netcdf = new NshmNetcdfReader(path);
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfWsUtils.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfWsUtils.java
index b9208daff307ef713fde77b327fc24864fe79af7..fa3d3eb73ea9640ec9a8e565c730a484650b1bf2 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfWsUtils.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfWsUtils.java
@@ -10,7 +10,6 @@ import com.google.gson.GsonBuilder;
 
 import gov.usgs.earthquake.nshmp.gmm.Imt;
 import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
-import gov.usgs.earthquake.nshmp.netcdf.NshmGroup;
 import gov.usgs.earthquake.nshmp.www.Response;
 import gov.usgs.earthquake.nshmp.www.WsUtils.EnumSerializer;
 import gov.usgs.earthquake.nshmp.www.WsUtils.NaNSerializer;
@@ -27,7 +26,6 @@ public class NetcdfWsUtils {
   static {
     GSON = new GsonBuilder()
         .registerTypeAdapter(Imt.class, new EnumSerializer<Imt>())
-        .registerTypeAdapter(NshmGroup.class, new EnumSerializer<NshmGroup>())
         .registerTypeAdapter(NehrpSiteClass.class, new EnumSerializer<NehrpSiteClass>())
         .registerTypeAdapter(Double.class, new NaNSerializer())
         .disableHtmlEscaping()
diff --git a/src/main/resources/2018A_CONUS_PGV.zip b/src/main/resources/2018A_CONUS_PGV.zip
deleted file mode 100644
index c7dcf5542503e964c7223c90f9b84edca575f572..0000000000000000000000000000000000000000
Binary files a/src/main/resources/2018A_CONUS_PGV.zip and /dev/null differ
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 24a15687398711ea6ada3a3c156bab1c2ec3b958..db526f3a7c18686e5fe3f42abf3a45eada8fa589 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -12,4 +12,4 @@ micronaut:
 
 nshmp-ws-static:
   netcdf-file: ${netcdf:src/main/resources/default.nc}
-  nshm-group: ${nshm:CONUS_2018A}
+  nshm-group: ${nshm:EXAMPLE}
diff --git a/src/main/resources/catalog.yml b/src/main/resources/catalog.yml
deleted file mode 100644
index 55ee48d18f02de1c4e2f7a2f2de41edba08ec452..0000000000000000000000000000000000000000
--- a/src/main/resources/catalog.yml
+++ /dev/null
@@ -1,83 +0,0 @@
-catalogs:
-  # Database for 2018b
-  -
-    nshm: 'NSHM_2018B'
-    description: '2018b NSHMP data release for WUS Basins (0.01 degree grid).'
-    items:
-      -
-        id: '5d31f90ce4b01d82ce86ea7b'
-        files:
-          - '0p01 Degree WUS Basin Map Data.zip'
-        url: 'https://www.sciencebase.gov/catalog/item/5d31f90ce4b01d82ce86ea7b'
-
-  # Database for 2018a
-  -
-    nshm: 'NSHM_2018A'
-    description: '2018a NSHMP data release for CONUS (0.05 degree grid).'
-    map_file: 'map-conus-0p05.geojson'
-    items:
-      -
-        id: '5d31f90ce4b01d82ce86ea7b'
-        files:
-          - '0p05 Degree CONUS Site Class Boundary AB Map Data.zip'
-          - '0p05 Degree CONUS Site Class B Map Data.zip'
-          - '0p05 Degree CONUS Site Class Boundary BC Map Data.zip'
-          - '0p05 Degree CONUS Site Class C Map Data.zip'
-          - '0p05 Degree CONUS Site Class Boundary CD Map Data.zip'
-          - '0p05 Degree CONUS Site Class D Map Data.zip'
-          - '0p05 Degree CONUS Site Class Boundary DE Map Data.zip'
-          - '0p05 Degree CONUS Site Class E Map Data.zip'
-        science_base_version: 'v1.1, revised 2020-02-18'
-        url: 'https://www.sciencebase.gov/catalog/item/5d31f90ce4b01d82ce86ea7b'
-      -
-        id: 'LOCAL'
-        files:
-          - 'src/main/resources/2018A_CONUS_PGV.zip'
-        science_base_version: 'N/A'
-        url: 'N/A'
-
-  # Database for 2018
-  -
-    nshm: 'NSHM_2018'
-    description: '2018 NSHMP data release for CONUS hazard curves.'
-    items:
-      -
-        id: '5d559795e4b01d82ce8e3fef'
-        files: 'ALL'
-        url: 'https://www.sciencebase.gov/catalog/item/5d559795e4b01d82ce8e3fef'
-
-  # Database for 2014a
-  -
-    nshm: 'NSHM_2014A'
-    description: '2014 NSHMP data release for additional T and site classes.'
-    items:
-      -
-        id: '5acf74c1e4b0e2c2dd1bf1fa'
-        files:
-          - 'Gridded Ground Motion Data.zip'
-          - 'Gridded Hazard Curve Data Version 1.1.zip'
-        url: 'https://www.sciencebase.gov/catalog/item/5acf74c1e4b0e2c2dd1bf1fa'
-
-  # Database for 2014
-  -
-    nshm: 'NSHM_2014'
-    description: '2014 NSHMP data release.'
-    items:
-      -
-        id: '5db9be62e4b06957974eb5ca'
-        files:
-          - 'Gridded Ground Motion Data.zip'
-          - 'Gridded Hazard Curve Data.zip'
-        url: 'https://www.sciencebase.gov/catalog/item/5db9be62e4b06957974eb5ca'
-
-  # Database for 2008
-  -
-    nshm: 'NSHM_2008'
-    description: '2008 NSHMP data release.'
-    items:
-      -
-        id: '5db892f2e4b0b0c58b5a51b6'
-        files:
-          - 'Gridded Ground Motion Data.zip'
-          - 'Gridded Hazard Curve Data.zip'
-        url: 'https://www.sciencebase.gov/catalog/item/5db892f2e4b0b0c58b5a51b6'
diff --git a/src/main/resources/default.nc b/src/main/resources/default.nc
index 20eaa6b5a1b4a7804eb545b230707f82769a1b27..3199b654b5f9a1679f668787db3810870b0a2769 100644
Binary files a/src/main/resources/default.nc and b/src/main/resources/default.nc differ
diff --git a/src/test/java/gov/usgs/earthquake/nshmp/netcdf/NshmGroupTests.java b/src/test/java/gov/usgs/earthquake/nshmp/netcdf/NshmGroupTests.java
deleted file mode 100644
index 73107684a86b8294ec3eabb42386326a666741ab..0000000000000000000000000000000000000000
--- a/src/test/java/gov/usgs/earthquake/nshmp/netcdf/NshmGroupTests.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package gov.usgs.earthquake.nshmp.netcdf;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import org.junit.jupiter.api.Test;
-
-class NshmGroupTests {
-
-  @Test
-  final void testCONUS_2018() {
-    assertEquals(NshmGroup.CONUS_2018A.toString(), "2018 Conterminous U.S. NSHM");
-    assertEquals(NshmGroup.CONUS_2018A.baseGroup(), "/CONUS/2018/v1.1");
-    assertEquals(NshmGroup.CONUS_2018A.locationPrecision(), 2);
-  }
-
-}
diff --git a/src/test/java/gov/usgs/earthquake/nshmp/netcdf/NshmNetcdfReaderTests.java b/src/test/java/gov/usgs/earthquake/nshmp/netcdf/NshmNetcdfReaderTests.java
index 93996184e9cda76c8e9e5a1b33a2a34b770afa16..0148c8cce851f21547d86835b382db73b7e529b7 100644
--- a/src/test/java/gov/usgs/earthquake/nshmp/netcdf/NshmNetcdfReaderTests.java
+++ b/src/test/java/gov/usgs/earthquake/nshmp/netcdf/NshmNetcdfReaderTests.java
@@ -124,7 +124,7 @@ public class NshmNetcdfReaderTests {
   static BoundingHazards BOUNDING_HAZARDS;
 
   public static final NshmNetcdfReader NETCDF =
-      new NshmNetcdfReader(NshmGroup.CONUS_2018A, NETCDF_PATH);
+      new NshmNetcdfReader(NETCDF_PATH);
 
   static {
     var builder = BoundingHazards.builder();
@@ -187,12 +187,6 @@ public class NshmNetcdfReaderTests {
         (locationB.latitude - locationA.latitude);
   }
 
-  @Test
-  final void nshmGroupTests() {
-    assertEquals(NshmGroup.CONUS_2018A, NETCDF.nshmGroup());
-    assertTrue(NshmGroup.CONUS_2018A.equals(NETCDF.nshmGroup()));
-  }
-
   @Test
   final void pathTests() {
     assertEquals(NETCDF_PATH, NETCDF.path());
@@ -242,11 +236,11 @@ public class NshmNetcdfReaderTests {
   @Test
   final void invalidNetcdfFileTest() {
     assertThrows(IllegalArgumentException.class, () -> {
-      new NshmNetcdfReader(NshmGroup.CONUS_2018A, Paths.get("fileDoesNotExist"));
+      new NshmNetcdfReader(Paths.get("fileDoesNotExist"));
     });
 
     assertThrows(RuntimeException.class, () -> {
-      new NshmNetcdfReader(NshmGroup.CONUS_2018A, NETCDF_INVALID_FILE);
+      new NshmNetcdfReader(NETCDF_INVALID_FILE);
     });
   }