diff --git a/build.gradle b/build.gradle
index c78af92822950c89b84ac6a4f23fcbf49817f2bb..ad66494967dbba109806bf2ee858f6050a3d2577 100644
--- a/build.gradle
+++ b/build.gradle
@@ -10,6 +10,7 @@ plugins {
   id "eclipse-wtp"
   id "jacoco"
   id "maven-publish"
+  id("io.micronaut.application") version "${micronautAppVersion}"
 }
 
 apply from: "${projectDir}/gradle/app-version.gradle"
@@ -95,3 +96,12 @@ test {
     excludeTestsMatching "gov.usgs.earthquake.nshmp.model.NshmTests"
   }
 }
+
+graalvmNative.toolchainDetection = false
+micronaut {
+  runtime("lambda_java")
+  processing {
+    incremental(true)
+    annotations("gov.usgs.earthquake.nshmp.www.*")
+  }
+}
diff --git a/gradle.properties b/gradle.properties
index 8118a497abd267e2f0c8b0e72d3647bbb19841cb..16974b50fae880645864579e4917a5f250a21ca0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,22 +1,18 @@
-awsEc2Version = 1.11.619
-awsLambdaCoreVersion = 1.1.0
-awsLambdaVersion = 1.11.461
-awsS3Version = 1.11.579
+awsSsmVersion = 2.29.52
 githooksVersion = 1.2.0
 gitVersionVersion = 0.15.0
 grgitVersion = 4.1.1
 jacksonVersion = 2.9.0
 jgitVersion = 6.7.0.202309050840-r
 junitVersion = 5.8.2
-micronautVersion = 3.2.3
-micronautRxVersion = 2.1.1
+micronautAppVersion = 3.7.10
+micronautVersion = 3.10.1
 nodePluginVersion = 3.0.1
 nodeVersion = 16.3.0
-nshmpLibVersion = 1.5.4
+nshmpLibVersion = 1.5.6
 nshmpUtilsJavaVersion = 0.4.0
 openApiVersion = 4.0.0
 shadowVersion = 7.1.2
-spotbugsVersion = 4.7.0
+spotbugsVersion = 4.7.3
 spotlessVersion = 6.0.4
-swaggerParserVersion = 2.0.30
-swaggerVersion = 2.1.7
+swaggerParserVersion = 2.1.21
diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle
index 68834b9a1653ec5b71ff357f9e6b3992ac472423..b1a32d9ec88a43ac67e8ca337f0af7bc540c378d 100644
--- a/gradle/dependencies.gradle
+++ b/gradle/dependencies.gradle
@@ -12,31 +12,21 @@ dependencies {
   implementation "org.eclipse.jgit:org.eclipse.jgit:${jgitVersion}"
 
   // AWS
-  implementation "com.amazonaws:aws-lambda-java-core:${awsLambdaCoreVersion}"
-  implementation "com.amazonaws:aws-java-sdk-lambda:${awsLambdaVersion}"
-  implementation "com.amazonaws:aws-java-sdk-s3:${awsS3Version}"
-  implementation "com.amazonaws:aws-java-sdk-ec2:${awsEc2Version}"
+  implementation "software.amazon.awssdk:ssm:${awsSsmVersion}"
 
   // Micronaut
-  annotationProcessor platform("io.micronaut:micronaut-bom:${micronautVersion}")
-  annotationProcessor "io.micronaut:micronaut-inject-java"
-  annotationProcessor "io.micronaut:micronaut-validation"
-  implementation platform("io.micronaut:micronaut-bom:${micronautVersion}")
-  implementation "io.micronaut:micronaut-http-client"
-  implementation "io.micronaut:micronaut-inject"
-  implementation "io.micronaut:micronaut-validation"
-  implementation "io.micronaut:micronaut-runtime"
-  implementation "io.micronaut:micronaut-http-server-netty"
-  implementation "io.projectreactor:reactor-core"
-  implementation "io.micronaut.rxjava3:micronaut-rxjava3:${micronautRxVersion}"
-  implementation "com.fasterxml.jackson.module:jackson-module-parameter-names:${jacksonVersion}"
-  runtimeOnly "ch.qos.logback:logback-classic"
+  annotationProcessor("io.micronaut:micronaut-http-validation")
+  implementation("io.micronaut:micronaut-jackson-databind")
+  implementation("io.micronaut.crac:micronaut-crac")
+  implementation("jakarta.annotation:jakarta.annotation-api")
+  implementation("io.micronaut.aws:micronaut-function-aws-api-proxy")
+  runtimeOnly("ch.qos.logback:logback-classic")
 
   // Swagger
-  annotationProcessor("io.micronaut.openapi:micronaut-openapi:${openApiVersion}")
+  annotationProcessor("io.micronaut.openapi:micronaut-openapi")
   implementation("io.micronaut.openapi:micronaut-openapi")
-  implementation("io.swagger.core.v3:swagger-annotations:${swaggerVersion}")
-  implementation("io.swagger.core.v3:swagger-models:${swaggerVersion}")
+  implementation("io.swagger.core.v3:swagger-annotations")
+  implementation("io.swagger.core.v3:swagger-models")
   implementation("io.swagger.parser.v3:swagger-parser:${swaggerParserVersion}")
 
   // junit
diff --git a/nshms.yml b/nshms.yml
index 8e2c8e74f1c8e2f2a43ec3db58efe1c40e74a7ba..f60efbace57bf38edc4c23e2eead30dbda8b31e0 100644
--- a/nshms.yml
+++ b/nshms.yml
@@ -4,29 +4,18 @@
 nshms:
   # Alaska 2007 NSHM
   -
-    repo: nshm-alaska
-    tag: 2.2.3
+    repo: 'nshm-alaska'
+    tag: '2.2.3'
     year: 2007
     deployment:
-      baseHref: /ws/nshmp/alaska-2007/dynamic
+      baseHref: '/ws/nshmp/alaska-2007/dynamic'
+      type: 'LAMBDA'
       environments:
-        development:
-          cpu: 2
-          memory: 4
-          min: 1
-          max: 3
-        staging:
-          cpu: 2
-          memory: 4
-          min: 1
-          max: 3
-        # production:
-          # cpu: 2
-          # memory: 4
-          # min: 1
-          # max: 5
-      label: 2007 Alaska Dynamic Services
-      model: ALASKA_2007
+        - 'development'
+        - 'staging'
+        # - production
+      label: '2007 Alaska Dynamic Services'
+      model: 'ALASKA_2007'
       test:
         site:
           latitude: 61.2
@@ -35,29 +24,18 @@ nshms:
 
   # Alaska 2023 NSHM
   -
-    repo: nshm-alaska
-    tag: 3.b.9
+    repo: 'nshm-alaska'
+    tag: '3.b.9'
     year: 2023
     deployment:
-      baseHref: /ws/nshmp/alaska-2023/dynamic
+      baseHref: '/ws/nshmp/alaska-2023/dynamic'
+      type: 'LAMBDA'
       environments:
-        development:
-          cpu: 4
-          memory: 32
-          min: 1
-          max: 3
-        staging:
-          cpu: 8
-          memory: 32
-          min: 1
-          max: 3
-        production:
-          cpu: 8
-          memory: 32
-          min: 1
-          max: 10
-      label: 2023 Alaska Dynamic Services (beta)
-      model: ALASKA_2023
+        - 'development'
+        - 'staging'
+        - 'production'
+      label: '2023 Alaska Dynamic Services (beta)'
+      model: 'ALASKA_2023'
       test:
         site:
           latitude: 61.2
@@ -66,29 +44,18 @@ nshms:
 
   # CONUS 2018 NSHM
   -
-    repo: nshm-conus
-    tag: 5.2.3
+    repo: 'nshm-conus'
+    tag: '5.2.3'
     year: 2018
     deployment:
-      baseHref: /ws/nshmp/conus-2018/dynamic
+      baseHref: '/ws/nshmp/conus-2018/dynamic'
+      type: 'LAMBDA'
       environments:
-        development:
-          cpu: 4
-          memory: 32
-          min: 1
-          max: 3
-        staging:
-          cpu: 8
-          memory: 32
-          min: 1
-          max: 3
-        production:
-          cpu: 16
-          memory: 32
-          min: 1
-          max: 15
-      label: 2018 Conterminous U.S. Dynamic Services
-      model: CONUS_2018
+        - 'development'
+        - 'staging'
+        - 'production'
+      label: '2018 Conterminous U.S. Dynamic Services'
+      model: 'CONUS_2018'
       test:
         site:
           latitude: 37.75
@@ -97,29 +64,18 @@ nshms:
 
   # CONUS 2023 NSHM
   -
-    repo: nshm-conus
-    tag: 6.1.0
+    repo: 'nshm-conus'
+    tag: '6.1.0'
     year: 2023
     deployment:
-      baseHref: /ws/nshmp/conus-2023/dynamic
+      baseHref: '/ws/nshmp/conus-2023/dynamic'
+      type: 'LAMBDA'
       environments:
-        development:
-          cpu: 4
-          memory: 32
-          min: 1
-          max: 3
-        staging:
-          cpu: 8
-          memory: 32
-          min: 1
-          max: 3
-        production:
-          cpu: 16
-          memory: 32
-          min: 1
-          max: 15
-      label: 2023 Conterminous U.S. Dynamic Services
-      model: CONUS_2023
+        - 'development'
+        - 'staging'
+        - 'production'
+      label: '2023 Conterminous U.S. Dynamic Services'
+      model: 'CONUS_2023'
       test:
         site:
           latitude: 37.75
@@ -128,29 +84,18 @@ nshms:
 
   # Hawaii 2021 NSHM
   -
-    repo: nshm-hawaii
-    tag: 2.0.2
+    repo: 'nshm-hawaii'
+    tag: '2.0.2'
     year: 2021
     deployment:
-      baseHref: /ws/nshmp/hawaii-2021/dynamic
+      baseHref: '/ws/nshmp/hawaii-2021/dynamic'
+      type: 'LAMBDA'
       environments:
-        development:
-          cpu: 2
-          memory: 4
-          min: 1
-          max: 3
-        staging:
-          cpu: 4
-          memory: 4
-          min: 1
-          max: 3
-        production:
-          cpu: 8
-          memory: 8
-          min: 1
-          max: 10
-      label: 2021 Hawaii Dynamic Services
-      model: HAWAII_2021
+        - 'development'
+        - 'staging'
+        - 'production'
+      label: '2021 Hawaii Dynamic Services'
+      model: 'HAWAII_2021'
       test:
         site:
           latitude: 21.3
@@ -159,29 +104,18 @@ nshms:
 
   # PRVI 2025 NSHM
   -
-    repo: nshm-prvi
-    tag: 2.a.1
+    repo: 'nshm-prvi'
+    tag: '2.a.1'
     year: 2025
     deployment:
-      baseHref: /ws/nshmp/prvi-2025/dynamic
+      baseHref: '/ws/nshmp/prvi-2025/dynamic'
+      type: 'LAMBDA'
       environments:
-        development:
-          cpu: 4
-          memory: 32
-          min: 1
-          max: 3
-        staging:
-          cpu: 8
-          memory: 32
-          min: 1
-          max: 3
-        # production:
-          # cpu: 8
-          # memory: 16
-          # min: 1
-          # max: 10
-      label: 2025 PRVI Dynamic Services
-      model: PRVI_2025
+        - 'development'
+        - 'staging'
+        # - production:
+      label: '2025 PRVI Dynamic Services'
+      model: 'PRVI_2025'
       test:
         site:
           latitude: 18.47
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/HazVersion.java b/src/main/java/gov/usgs/earthquake/nshmp/www/HazVersion.java
index 38d88f8ce479870063b8b581583b9e5a397b97c9..538964aa5be6630bb36ebd924d8f5930ba95b470 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/HazVersion.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/HazVersion.java
@@ -12,6 +12,8 @@ import gov.usgs.earthquake.nshmp.internal.LibVersion;
 
 public class HazVersion implements AppVersion {
 
+  private static final String MODEL_FILE = "model-version.json";
+
   public static VersionInfo[] appVersions(Path modelPath) {
     var versions = new ArrayList<VersionInfo>();
     versions.add(new HazVersion().getVersionInfo());
@@ -44,21 +46,28 @@ public class HazVersion implements AppVersion {
    */
   private static VersionInfo getNshmVersion(Path modelPath) {
     try {
-      var git = Git.open(modelPath.toFile());
-      var repo = git.getRepository();
-      var url = repo
-          .getConfig()
-          .getString("remote", "origin", "url")
-          .split(".git")[0];
-      var slash = url.split("/");
-      var projectName = slash[slash.length - 1];
+      var resource = HazVersion.class.getResource("/version/" + MODEL_FILE);
+
+      if (resource != null) {
+        return AppVersion.versionInfo(resource);
+      } else {
+        var git = Git.open(modelPath.toFile());
+        var repo = git.getRepository();
+        var url = repo
+            .getConfig()
+            .getString("remote", "origin", "url")
+            .split(".git")[0];
+        var slash = url.split("/");
+        var projectName = slash[slash.length - 1];
+
+        return VersionInfo.builder()
+            .projectName(projectName)
+            .url(url)
+            .version(git.describe().call())
+            .gitHash(repo.getRefDatabase().findRef("HEAD").getObjectId().name())
+            .build();
+      }
 
-      return VersionInfo.builder()
-          .projectName(projectName)
-          .url(url)
-          .version(git.describe().call())
-          .gitHash(repo.getRefDatabase().findRef("HEAD").getObjectId().name())
-          .build();
     } catch (Exception e) {
       return null;
     }
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/PrimingResource.java b/src/main/java/gov/usgs/earthquake/nshmp/www/PrimingResource.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8713d7a3dec7198bd526795469e294d9707fa01
--- /dev/null
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/PrimingResource.java
@@ -0,0 +1,75 @@
+package gov.usgs.earthquake.nshmp.www;
+
+import java.nio.file.Path;
+
+import org.crac.Context;
+import org.crac.Resource;
+
+import software.amazon.awssdk.services.ssm.SsmClient;
+import software.amazon.awssdk.services.ssm.model.ParameterType;
+import software.amazon.awssdk.services.ssm.model.PutParameterRequest;
+import software.amazon.awssdk.services.ssm.model.SsmException;
+
+import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext;
+import com.amazonaws.serverless.proxy.model.AwsProxyRequest;
+
+import gov.usgs.earthquake.nshmp.gmm.Gmm;
+
+import io.micronaut.context.annotation.Value;
+import io.micronaut.crac.OrderedResource;
+import io.micronaut.function.aws.proxy.MicronautLambdaHandler;
+import jakarta.inject.Singleton;
+
+/**
+ * Prime application for AWS Lambda snapstart.
+ */
+@Singleton
+public class PrimingResource implements OrderedResource {
+
+  @Value("${nshmp-haz.model-path}")
+  private Path modelPath;
+
+  @Override
+  public void beforeCheckpoint(Context<? extends Resource> context) throws Exception {
+    ServletUtil.model(ServletUtil.loadModel(modelPath));
+    updateParameter();
+
+    try (MicronautLambdaHandler handler = new MicronautLambdaHandler()) {
+      handler.handleRequest(
+          getAwsProxyRequest("/hazard"),
+          new MockLambdaContext());
+    }
+  }
+
+  @Override
+  public void afterRestore(Context<? extends Resource> context) throws Exception {
+    // Reset executors on restore as Shutdown event does not fire on AWS lambda
+    ServletUtil.resetExecutors();
+  }
+
+  private static AwsProxyRequest getAwsProxyRequest(String path) {
+    final AwsProxyRequest awsProxyRequest = new AwsProxyRequest();
+    awsProxyRequest.setHttpMethod("GET");
+    awsProxyRequest.setPath(path);
+    return awsProxyRequest;
+  }
+
+  private void updateParameter() throws SsmException {
+    var parameterName = System.getenv("IMT_PARAMETER_NAME");
+
+    if (parameterName == null) {
+      throw new RuntimeException("IMT_PARAMETER_NAME not found");
+    }
+
+    var client = SsmClient.create();
+
+    var parameterRequest = PutParameterRequest.builder()
+        .name(parameterName)
+        .type(ParameterType.STRING)
+        .value(ServletUtil.GSON2.toJson(Gmm.supportedImts(ServletUtil.model().gmms())))
+        .overwrite(true)
+        .build();
+
+    client.putParameter(parameterRequest);
+  }
+}
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/ServletUtil.java b/src/main/java/gov/usgs/earthquake/nshmp/www/ServletUtil.java
index 18bd54070b8a59c1e14cef3f8d6420219adae510..b44aaaa6feef89af9af27fb38c2bb75854d1c6cb 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/ServletUtil.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/ServletUtil.java
@@ -11,6 +11,7 @@ import java.nio.file.FileSystems;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.HashMap;
+import java.util.Optional;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -51,8 +52,8 @@ public class ServletUtil {
   public static final Gson GSON;
   public static final Gson GSON2;
 
-  public static final ListeningExecutorService CALC_EXECUTOR;
-  public static final ExecutorService TASK_EXECUTOR;
+  public static ListeningExecutorService CALC_EXECUTOR;
+  public static ExecutorService TASK_EXECUTOR;
 
   public static final int THREAD_COUNT;
 
@@ -61,9 +62,13 @@ public class ServletUtil {
 
   private static HazardModel HAZARD_MODEL;
 
+  private static Optional<String> awsRuntime =
+      Optional.ofNullable(System.getenv("AWS_LAMBDA_RUNTIME_API"));
+
   static {
     THREAD_COUNT = getRuntime().availableProcessors();
-    CALC_EXECUTOR = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(THREAD_COUNT));
+    CALC_EXECUTOR =
+        MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(THREAD_COUNT));
     TASK_EXECUTOR = Executors.newSingleThreadExecutor();
     GSON = new GsonBuilder()
         .registerTypeAdapter(Imt.class, new WsUtils.EnumSerializer<Imt>())
@@ -85,7 +90,22 @@ public class ServletUtil {
         .serializeNulls()
         .setPrettyPrinting()
         .create();
+  }
+
+  /**
+   * Reset executors on AWS Lambda SnapStart restore
+   */
+  static void resetExecutors() {
+    CALC_EXECUTOR.shutdown();
+    TASK_EXECUTOR.shutdown();
 
+    CALC_EXECUTOR =
+        MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(THREAD_COUNT));
+    TASK_EXECUTOR = Executors.newSingleThreadExecutor();
+  }
+
+  static void model(HazardModel model) {
+    HAZARD_MODEL = model;
   }
 
   public static HazardModel model() {
@@ -100,10 +120,12 @@ public class ServletUtil {
 
   @EventListener
   void startup(StartupEvent event) {
-    HAZARD_MODEL = loadModel(modelPath);
+    if (!awsRuntime.isPresent()) {
+      HAZARD_MODEL = loadModel(modelPath);
+    }
   }
 
-  private HazardModel loadModel(Path path) {
+  static HazardModel loadModel(Path path) {
     URL url;
     URI uri;
     String uriString;
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerController.java
index 18fd6f3030f0ee6df671d8f58aa3522a66cc7c3f..2068cc2e0521d02c2443870daf33a2e4f16f52ea 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerController.java
@@ -1,6 +1,7 @@
 package gov.usgs.earthquake.nshmp.www;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.slf4j.LoggerFactory;
 
@@ -43,7 +44,7 @@ public class SwaggerController {
     } catch (Exception e) {
       return ServletUtil.error(
           LoggerFactory.getLogger("Swagger"),
-          e, "Swagger", request.getUri().toString());
+          e, "Swagger", request.getUri().getPath());
     }
   }
 
@@ -52,20 +53,20 @@ public class SwaggerController {
       HazardModel model) {
     var openApi = new OpenAPIV3Parser().read("META-INF/swagger/nshmp-haz.yml");
     var bounds = model.bounds();
-    SwaggerUtils.addLocationBounds(openApi, bounds.min, bounds.max);
     var components = openApi.getComponents();
     var schemas = components.getSchemas();
     SwaggerUtils.siteClassSchema(schemas, List.copyOf(model.siteClasses().keySet()));
     SwaggerUtils.imtSchema(schemas, List.copyOf(model.config().hazard.imts));
+    var boundsInfo = SwaggerUtils.locationBoundsInfo(bounds.min, bounds.max, Optional.empty());
     FeaturesService.featureTypeSchema(schemas);
     openApi.servers(null);
 
     openApi.getInfo().setTitle(model.name() + " Web Services");
     openApi.getInfo().setDescription(
         "National Seismic Hazard Model (NSHM) hazard calculations and queries for the " +
-            model.name() + " hazard model.");
+            model.name() + " hazard model.\n\n" +
+            boundsInfo);
 
     return openApi;
   }
-
 }
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerUIController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerUIController.java
new file mode 100644
index 0000000000000000000000000000000000000000..d18a7ff4e6ced31aba7e4df911a4d12513869713
--- /dev/null
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerUIController.java
@@ -0,0 +1,120 @@
+package gov.usgs.earthquake.nshmp.www;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.Optional;
+
+import org.apache.commons.io.IOUtils;
+
+import io.micronaut.core.io.scan.ClassPathResourceLoader;
+import io.micronaut.http.HttpResponse;
+import io.micronaut.http.MediaType;
+import io.micronaut.http.annotation.Controller;
+import io.micronaut.http.annotation.Get;
+import io.micronaut.http.annotation.PathVariable;
+import io.micronaut.http.annotation.Produces;
+import io.swagger.v3.oas.annotations.Hidden;
+import jakarta.annotation.Nullable;
+import jakarta.inject.Inject;
+
+/**
+ * Handle Swagger static resources.
+ */
+@Controller(
+    value = "/",
+    produces = {
+        MediaType.APPLICATION_YAML,
+        MediaType.TEXT_HTML,
+        MediaType.IMAGE_PNG,
+        MediaType.TEXT_PLAIN,
+        "font/woff",
+        "font/woff2",
+        "font/ttf",
+        "image/svg+xml",
+        "text/css",
+        "text/javascript",
+    })
+public class SwaggerUIController {
+  private static final String SWAGGER_UI_RESOURCE_LOCATION = "classpath:swagger/";
+  private final ClassPathResourceLoader loader;
+
+  public SwaggerUIController(ClassPathResourceLoader loader) {
+    this.loader = loader;
+  }
+
+  @Inject
+  private NshmpMicronautServlet servlet;
+
+  @Get("{/path:.*}{.ext:png}")
+  @Produces(MediaType.IMAGE_PNG)
+  @Hidden
+  public byte[] getSwaggerPngImages(
+      @PathVariable @Nullable String path,
+      @PathVariable @Nullable String ext) throws IOException {
+    Optional<URL> resource = loader.getResource(SWAGGER_UI_RESOURCE_LOCATION + path + "." + ext);
+    return IOUtils.toByteArray(resource.orElseThrow().openStream());
+  }
+
+  @Get("{/path:.*}{.ext:b64}")
+  @Produces(MediaType.TEXT_PLAIN)
+  @Hidden
+  public HttpResponse<String> getSwaggerBase64Images(
+      @PathVariable @Nullable String path,
+      @PathVariable @Nullable String ext) throws IOException {
+    return HttpResponse.ok(getResourceString(SWAGGER_UI_RESOURCE_LOCATION + path + "." + ext))
+        .contentType(MediaType.TEXT_PLAIN);
+  }
+
+  @Get("{/path:.*}{.ext:css|js}")
+  @Produces({ "text/css", "text/javascript" })
+  @Hidden
+  public String getSwaggerLibrary(
+      @PathVariable @Nullable String path,
+      @PathVariable @Nullable String ext) throws IOException {
+    return getResourceString(SWAGGER_UI_RESOURCE_LOCATION + path + "." + ext);
+  }
+
+  @Get("{/path:.*}{.ext:svg}")
+  @Produces("image/svg+xml")
+  @Hidden
+  public String getSwaggerSvgImages(
+      @PathVariable @Nullable String path,
+      @PathVariable @Nullable String ext) throws IOException {
+    return getResourceString(SWAGGER_UI_RESOURCE_LOCATION + path + "." + ext);
+  }
+
+  @Get("{/path:.*}{.ext:eot}")
+  @Produces("application/vnd.ms-fontobject")
+  @Hidden
+  public String getSwaggerEotFont(
+      @PathVariable @Nullable String path,
+      @PathVariable @Nullable String ext) throws IOException {
+    return getResourceString(SWAGGER_UI_RESOURCE_LOCATION + path + "." + ext);
+  }
+
+  @Get("{/path:.*}{.ext:woff|woff2|ttf|otf}")
+  @Produces("font/*")
+  @Hidden
+  public String getSwaggerFont(
+      @PathVariable @Nullable String path,
+      @PathVariable @Nullable String ext) throws IOException {
+    return getResourceString(SWAGGER_UI_RESOURCE_LOCATION + path + "." + ext);
+  }
+
+  @Get("/")
+  @Produces(MediaType.TEXT_HTML)
+  @Hidden
+  public String getSwaggerIndexPage() throws IOException {
+    return getResourceString("classpath:swagger/index.html");
+  }
+
+  private String getResourceString(String path) throws IOException {
+    Optional<URL> resource = loader.getResource(path);
+
+    return IOUtils.toString(
+        (BufferedInputStream) resource.orElseThrow().getContent(),
+        StandardCharsets.UTF_8);
+  }
+}
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java
index ae7cb13e77582ee9cb78da46c58325cedd516a6d..1d7c49c58a2f408c68fd0057062ffbdfe64bed69 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java
@@ -69,7 +69,7 @@ public class DisaggController {
       return ServletUtil.error(
           DisaggService.LOG, e,
           DisaggService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
@@ -118,7 +118,7 @@ public class DisaggController {
       return ServletUtil.error(
           DisaggService.LOG, e,
           DisaggService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
@@ -162,7 +162,7 @@ public class DisaggController {
       return ServletUtil.error(
           DisaggService.LOG, e,
           DisaggService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java
index a0bdb002b8be81bd0a4f31bf275aea0b632de2a5..290cabec9fcd621881b2fe0899c6e426e237c403 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggService.java
@@ -79,7 +79,7 @@ public final class DisaggService {
   }
 
   static HttpResponse<String> getMetadata(HttpRequest<?> request) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var usage = new Metadata(ServletUtil.model());
     var response = ResponseBody.usage()
         .name(NAME)
@@ -103,7 +103,7 @@ public final class DisaggService {
         .build();
     var body = ResponseBody.success()
         .name(NAME)
-        .url(request.http.getUri().toString())
+        .url(request.http.getUri().getPath())
         .metadata(new ResponseMetadata(HazVersion.appVersions(ServletUtil.model().root())))
         .request(request)
         .response(response)
@@ -123,7 +123,7 @@ public final class DisaggService {
         .build();
     var body = ResponseBody.success()
         .name(NAME)
-        .url(request.http.getUri().toString())
+        .url(request.http.getUri().getPath())
         .metadata(new ResponseMetadata(HazVersion.appVersions(ServletUtil.model().root())))
         .request(request)
         .response(response)
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java
index 261b62b69b173fd23e98c07eaab8fc17050737c7..15c4de0d62f79441ff0542301824af19d44e893a 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java
@@ -58,12 +58,13 @@ public class HazardController {
   @Get(produces = MediaType.APPLICATION_JSON)
   public HttpResponse<String> doGetMetadata(HttpRequest<?> http) {
     try {
-      return HazardService.getMetadata(http);
+      var response = HazardService.getMetadata(http);
+      return response;
     } catch (Exception e) {
       return ServletUtil.error(
           HazardService.LOG, e,
           HazardService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
@@ -110,7 +111,7 @@ public class HazardController {
       return ServletUtil.error(
           HazardService.LOG, e,
           HazardService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java
index 42830d66d40218da8e34f8686dbcc699787f5754..f36cd7984287d7e7af3f2e85abcf43728e7ba56b 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardService.java
@@ -63,7 +63,7 @@ public final class HazardService {
   private static final String TOTAL_KEY = "Total";
 
   public static HttpResponse<String> getMetadata(HttpRequest<?> request) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var usage = new Metadata(ServletUtil.model());
     var body = ResponseBody.usage()
         .name(NAME)
@@ -87,7 +87,7 @@ public final class HazardService {
         .build();
     var body = ResponseBody.success()
         .name(NAME)
-        .url(request.http.getUri().toString())
+        .url(request.http.getUri().getPath().toString())
         .metadata(new ResponseMetadata(HazVersion.appVersions(ServletUtil.model().root())))
         .request(request)
         .response(response)
@@ -136,6 +136,7 @@ public final class HazardService {
 
     Metadata(HazardModel model) {
       this.model = new SourceModel(model);
+
       longitude = new DoubleParameter(
           "Longitude",
           "°",
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeatureCollectionService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeatureCollectionService.java
index ed865dace6fcb6a3c5cf826117c50c9523f52591..566def814a753bc8b15929135482d8d07cdaabb4 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeatureCollectionService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeatureCollectionService.java
@@ -31,7 +31,7 @@ public class FeatureCollectionService {
     } else {
       var response = ResponseBody.<RequestData, JsonElement> success()
           .name(name)
-          .url(http.getUri().toString())
+          .url(http.getUri().getPath())
           .metadata(new ResponseMetadata(HazVersion.appVersions(ServletUtil.model().root())))
           .request(requestData)
           .response(fc.toJsonTree())
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeaturesController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeaturesController.java
index 5276a2afd111e695de7c1297fc7cd54c6d5dcd44..6ca2ed7f1307daa3ca51c0a42bdd6aa8ac16f68e 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeaturesController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeaturesController.java
@@ -62,7 +62,7 @@ public class FeaturesController {
       return ServletUtil.error(
           FeaturesService.LOG, e,
           FeaturesService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeaturesService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeaturesService.java
index a7ce6e5423567449f4550aba80e8bbaf84d12b24..1477b2204e4c5aa44e9bf77cf85c9b2cca7dc71b 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeaturesService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/FeaturesService.java
@@ -91,7 +91,7 @@ public class FeaturesService {
   private static HttpResponse<String> processResponse(
       HttpRequest<?> request,
       RequestData requestData) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
 
     var features = requestData.featureType == FeatureType.ALL
         ? Models.features(ServletUtil.model(), Optional.empty())
@@ -120,7 +120,7 @@ public class FeaturesService {
   }
 
   private static HttpResponse<String> metadata(HttpRequest<?> request) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var metadata = new Metadata(ServletUtil.model());
     var response = ResponseBody.usage()
         .name(NAME)
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/LogicTreesController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/LogicTreesController.java
index 2f941ff14789f3fe25383dea32c0bb8b150c654b..7b2eb74eb1b7c7d6c5668fd6ddf43a2c044ea7a7 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/LogicTreesController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/LogicTreesController.java
@@ -58,7 +58,7 @@ public class LogicTreesController {
       return ServletUtil.error(
           LogicTreesService.LOG, e,
           LogicTreesService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
@@ -82,7 +82,7 @@ public class LogicTreesController {
       return ServletUtil.error(
           LogicTreesService.LOG, e,
           LogicTreesService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
@@ -106,7 +106,7 @@ public class LogicTreesController {
       return ServletUtil.error(
           LogicTreesService.LOG, e,
           LogicTreesService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/LogicTreesService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/LogicTreesService.java
index 3d961d8bd07493b2bb00e95a939e0779720c1c90..ce64d2d41838c4d665860481d190a1f86d9bd631 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/LogicTreesService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/LogicTreesService.java
@@ -27,7 +27,7 @@ public class LogicTreesService {
   static final Logger LOG = LoggerFactory.getLogger(LogicTreesService.class);
 
   public static HttpResponse<String> getMetadata(HttpRequest<?> request) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var metadata = new Metadata(ServletUtil.model());
     var response = ResponseBody.usage()
         .name(NAME)
@@ -40,7 +40,7 @@ public class LogicTreesService {
   }
 
   public static HttpResponse<String> getFeatureTree(HttpRequest<?> request, Integer id) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var featureTree = Models.features(ServletUtil.model(), id);
     var requestData = new RequestData(id);
     var response = ResponseBody.success()
@@ -54,7 +54,7 @@ public class LogicTreesService {
   }
 
   public static HttpResponse<String> getMfdTree(HttpRequest<?> request, Integer id) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var mfdTree = Models.tree(ServletUtil.model(), id);
     var requestData = new RequestData(id);
     var response = ResponseBody.success()
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/MapController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/MapController.java
index dffe697935206db22071c661dbfaeb25e47d3657..dc9b524e63153c422fae639c32a61a8fb9fb3a8a 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/MapController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/MapController.java
@@ -69,7 +69,7 @@ public class MapController {
           LOG,
           e,
           NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/MfdsController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/MfdsController.java
index 3d87c87bb4dd583ed65f3528671a0d2511829333..d095575e0cc5e414cb83df199a222c249c3d0198 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/MfdsController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/MfdsController.java
@@ -64,7 +64,7 @@ public class MfdsController {
       return ServletUtil.error(
           LogicTreesService.LOG, e,
           LogicTreesService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
@@ -90,7 +90,7 @@ public class MfdsController {
       return ServletUtil.error(
           LogicTreesService.LOG, e,
           LogicTreesService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
@@ -118,7 +118,7 @@ public class MfdsController {
       return ServletUtil.error(
           LogicTreesService.LOG, e,
           LogicTreesService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/MfdsService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/MfdsService.java
index 4acad3ac39db553762e4cfc548e9c39368173128..b445bb90d3422a6038f0138000e1047110c1b032 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/MfdsService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/MfdsService.java
@@ -32,7 +32,7 @@ public class MfdsService {
   static final Logger LOG = LoggerFactory.getLogger(LogicTreesService.class);
 
   public static HttpResponse<String> getMetadata(HttpRequest<?> request) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var metadata = new Metadata(ServletUtil.model());
     var response = ResponseBody.usage()
         .name(NAME)
@@ -49,7 +49,7 @@ public class MfdsService {
       TectonicSetting setting,
       Optional<SourceType> type) {
 
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var mfd = Models.mfd(ServletUtil.model(), setting, type);
     var requestData = new RequestData(setting, type.orElse(null));
     var response = ResponseBody.success()
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/ProbabilityController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/ProbabilityController.java
index 33dbd1b172b7d58bbcaab09b6675a442fb536cd1..75a430010a7e6a32e104acf0be23d3c50d15b376 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/ProbabilityController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/ProbabilityController.java
@@ -57,7 +57,7 @@ public class ProbabilityController {
       return ServletUtil.error(
           RateService.LOG, e,
           RateService.NAME_PROBABILITY,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
@@ -98,7 +98,7 @@ public class ProbabilityController {
       return ServletUtil.error(
           RateService.LOG, e,
           RateService.NAME_PROBABILITY,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateController.java
index 8dffb0c1fd894303271ee5ac796ea16a9c2ea78d..1ad8fa730622f2cf06cfbbceb64b6a522d5d2fcf 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateController.java
@@ -57,7 +57,7 @@ public class RateController {
       return ServletUtil.error(
           RateService.LOG, e,
           RateService.NAME_RATE,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
@@ -93,7 +93,7 @@ public class RateController {
       return ServletUtil.error(
           RateService.LOG, e,
           RateService.NAME_RATE,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateService.java
index 0907b014c71b1bb890cc9b372d119b58e8222774..59246530d7358c50a78d24ac760eb1e7bc0a6424 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateService.java
@@ -68,7 +68,7 @@ public final class RateService {
         .build();
     var body = ResponseBody.success()
         .name(NAME_RATE)
-        .url(request.http.getUri().toString())
+        .url(request.http.getUri().getPath())
         .metadata(new ResponseMetadata(HazVersion.appVersions(ServletUtil.model().root())))
         .request(request)
         .response(response)
@@ -87,7 +87,7 @@ public final class RateService {
         .build();
     var body = ResponseBody.success()
         .name(NAME_PROBABILITY)
-        .url(request.http.getUri().toString())
+        .url(request.http.getUri().getPath())
         .metadata(new ResponseMetadata(HazVersion.appVersions(ServletUtil.model().root())))
         .request(request)
         .response(response)
@@ -332,7 +332,7 @@ public final class RateService {
   }
 
   public static HttpResponse<String> getRateMetadata(HttpRequest<?> request) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var usage = new Metadata(ServletUtil.model());
     var body = ResponseBody.usage()
         .name(NAME_RATE)
@@ -346,7 +346,7 @@ public final class RateService {
   }
 
   public static HttpResponse<String> getProbMetadata(HttpRequest<?> request) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var usage = new ProbMetadata(ServletUtil.model());
     var body = ResponseBody.usage()
         .name(NAME_PROBABILITY)
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/SourceController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/SourceController.java
index 2bd63ae10a410fcd0de8e2ee2bc7b482f935322a..0b308c4d2e098c80ff32026a2c7f473a1fb3eca2 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/SourceController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/SourceController.java
@@ -62,7 +62,7 @@ public class SourceController {
       return ServletUtil.error(
           SourceService.LOG, e,
           SourceService.NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/SourceService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/SourceService.java
index dd1bc2ed9c11a4fa753979ede1db8dec5070aaff..2cae2b306756b9ecc17b371e5afe3d9c5a22b422 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/SourceService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/SourceService.java
@@ -35,7 +35,7 @@ public class SourceService {
   static final Logger LOG = LoggerFactory.getLogger(SourceService.class);
 
   static HttpResponse<String> getMetadata(HttpRequest<?> request) {
-    var url = request.getUri().toString();
+    var url = request.getUri().getPath();
     var response = ResponseBody.usage()
         .name(NAME)
         .url(url)
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/TestSitesController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/TestSitesController.java
index 45fa30f2fff3a988bf69c2a7f4a33afd00c44434..bf17b3b87b0c4660f624c4e1fc93829d1230f267 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/TestSitesController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/TestSitesController.java
@@ -69,7 +69,7 @@ public class TestSitesController {
           LOG,
           e,
           NAME,
-          http.getUri().toString());
+          http.getUri().getPath());
     }
   }
 
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 7d46c279404717ec0d3f06223a13cb1da59b93a3..29a0525818e39ee57642751ee9c753fa1cef04fe 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -21,4 +21,4 @@ nshmp-haz:
   # To specify the model to use:
   #     java -jar build/libs/nshmp-haz.jar --model=<path/to/model>
   #
-  model-path: ${model:nshms/nshm-conus-2018}
+  model-path: ${MODEL:nshms/nshm-conus-2018}
diff --git a/src/main/resources/swagger/drupal/images/logo.png b/src/main/resources/swagger/drupal/images/logo.png
deleted file mode 100644
index 78674a8aa97bedf4cd56b9329f3bf57fb239db8d..0000000000000000000000000000000000000000
Binary files a/src/main/resources/swagger/drupal/images/logo.png and /dev/null differ
diff --git a/src/main/resources/swagger/index.html b/src/main/resources/swagger/index.html
index a7147399886512ea6788996a24578940ebd41063..731ca4ee91b264df6c59181bc80ab3109d2d33a3 100644
--- a/src/main/resources/swagger/index.html
+++ b/src/main/resources/swagger/index.html
@@ -99,7 +99,7 @@
               <img
                 aria-hidden="true"
                 class="usa-banner__header-flag"
-                src="uswds/img/us_flag_small.png"
+                src="uswds/img/us_flag_small.svg"
                 alt=""
               />
             </div>
@@ -198,7 +198,7 @@
       <div class="tmp-container">
         <div class="header-search">
           <a class="logo-header" href="https://earthquake.usgs.gov/nshmp/" title="Home">
-            <img class="img" src="drupal/images/logo.png" alt="Home" />
+            <img class="img" src="usgs-logo.svg" alt="Home" />
           </a>
         </div>
       </div>
@@ -289,49 +289,6 @@
           </ul>
         </div>
         <!-- /.footer-utl-links -->
-
-        <!-- .footer-social-links -->
-        <div class="footer-social-links">
-          <ul class="social">
-            <li class="follow">Follow</li>
-            <li class="twitter">
-              <a href="https://twitter.com/usgs" target="_blank">
-                <i class="fa fa-twitter-square"><span class="only">Twitter</span></i>
-              </a>
-            </li>
-
-            <li class="facebook">
-              <a href="https://facebook.com/usgeologicalsurvey" target="_blank">
-                <i class="fa fa-facebook-square"><span class="only">Facebook</span></i>
-              </a>
-            </li>
-
-            <li class="github">
-              <a href="https://github.com/usgs" target="_blank">
-                <i class="fa fa-github"><span class="only">GitHub</span></i>
-              </a>
-            </li>
-
-            <li class="flickr">
-              <a href="https://flickr.com/usgeologicalsurvey" target="_blank">
-                <i class="fa fa-flickr"><span class="only">Flickr</span></i>
-              </a>
-            </li>
-
-            <li class="youtube">
-              <a href="http://youtube.com/usgs" target="_blank">
-                <i class="fa fa-youtube-play"><span class="only">YouTube</span></i>
-              </a>
-            </li>
-
-            <li class="instagram">
-              <a href="https://instagram.com/usgs" target="_blank">
-                <i class="fa fa-instagram"><span class="only">Instagram</span></i>
-              </a>
-            </li>
-          </ul>
-        </div>
-        <!-- /.footer-social-links -->
       </div>
     </footer>
     <!-- END USGS Footer Template- -->
diff --git a/src/main/resources/swagger/uswds/img/us_flag_small.png b/src/main/resources/swagger/uswds/img/us_flag_small.png
deleted file mode 100644
index 7d61cd6c4c38b69f815536e62a9b90235a579620..0000000000000000000000000000000000000000
Binary files a/src/main/resources/swagger/uswds/img/us_flag_small.png and /dev/null differ
diff --git a/src/main/resources/swagger/uswds/img/us_flag_small.svg b/src/main/resources/swagger/uswds/img/us_flag_small.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1fa0d25538d7d2bbadd5f270b1c016f9e2b1cd58
--- /dev/null
+++ b/src/main/resources/swagger/uswds/img/us_flag_small.svg
@@ -0,0 +1 @@
+<svg width="64" height="44" version="1.1" xmlns="http://www.w3.org/2000/svg" desc="Created with imagetracer.js version 1.2.6" ><path fill="rgb(30,51,177)" stroke="rgb(30,51,177)" stroke-width="1" opacity="1" d="M 8 0 L 16 0 Q 14 6 20 4 Q 18 -2 24 0 L 24 4 Q 18 2 20 8 L 28 8 Q 26 2 32 4 L 32 12 L 16 12 L 16 20 L 20 20 Q 18 14 24 16 Q 22 22 28 20 Q 26 14 32 16 Q 34 22 28 20 L 28 28 L 20 28 Q 22 22 16 24 Q 18 30 12 28 Q 14 22 8 24 Q 10 30 4 28 Q 6 22 0 24 L 0 20 L 4 20 Q 2 26 8 24 L 8 16.5 L 12 16 L 12 8 Q 6 6 8 12 L 0 12 L 0 4 L 4 4 Q 2 10 8 8 L 8 0 Z M 12 4 Q 10 10 16 8 Q 18 2 12 4 Z M 12 20 Q 10 26 16 24 Q 18 18 12 20 Z M 20 20 Q 18 26 24 24 Q 26 18 20 20 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 36 0 L 51.5 0 L 52 4 L 36.5 4 L 36 0 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 56 0 L 64 0 L 64 4 L 56 4 L 56 0 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 36 8 L 55.5 8 L 56 12 L 36.5 12 L 36 8 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 60 8 Q 66 6 64 12 Q 58 14 60 8 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 36 16 L 44 16 L 44 20 L 36 20 L 36 16 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 52 16 L 64 16 L 64 20 L 52 20 L 52 16 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 36 24 Q 42 22 40 28 Q 34 30 36 24 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 44 24 L 63.5 24 L 64 28 L 44.5 28 L 44 24 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 0 32 L 12 32 L 12 36 L 0 36 L 0 32 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 20 32 L 35.5 32 L 36 36 L 20.5 36 L 20 32 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 40 32 Q 46 30 44 36 Q 38 38 40 32 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 48 32 L 56 32 L 56 36 L 48 36 L 48 32 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 60 32 Q 66 30 64 36 Q 58 38 60 32 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 0 40 L 8 40 L 8 44 L 0 44 L 0 40 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 12 40 Q 18 38 16 44 Q 10 46 12 40 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 20 40 L 28 40 L 28 44 L 20 44 L 20 40 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 32 40 Q 38 38 36 44 Q 30 46 32 40 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 40 40 L 55.5 40 L 56 44 L 40.5 44 L 40 40 Z " /><path fill="rgb(218,62,31)" stroke="rgb(218,62,31)" stroke-width="1" opacity="1" d="M 60 40 Q 66 38 64 44 Q 58 46 60 40 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 32 0 Q 38 -2 36 4 Q 30 6 32 0 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 52 0 Q 58 -2 56 4 Q 50 6 52 0 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 32 8 Q 38 6 36 12 Q 30 14 32 8 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 56 8 Q 62 6 60 12 Q 54 14 56 8 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 32 16 Q 38 14 36 20 Q 30 22 32 16 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 44 16 L 52 16 L 52 20 L 44 20 L 44 16 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 32 24 Q 38 22 36 28 Q 30 30 32 24 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 40 24 Q 46 22 44 28 Q 38 30 40 24 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 12 32 L 20 32 L 20 36 L 12 36 L 12 32 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 36 32 Q 42 30 40 36 Q 34 38 36 32 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 44 32 Q 50 30 48 36 Q 42 38 44 32 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 56 32 Q 62 30 60 36 Q 54 38 56 32 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 8 40 Q 14 38 12 44 Q 6 46 8 40 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 16 40 Q 22 38 20 44 Q 14 46 16 40 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 28 40 Q 34 38 32 44 Q 26 46 28 40 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 36 40 Q 42 38 40 44 Q 34 46 36 40 Z " /><path fill="rgb(219,63,31)" stroke="rgb(219,63,31)" stroke-width="1" opacity="1" d="M 56 40 Q 62 38 60 44 Q 54 46 56 40 Z " /><path fill="rgb(30,52,178)" stroke="rgb(30,52,178)" stroke-width="1" opacity="1" d="M 4 0 Q 10 -2 8 4 Q 2 6 4 0 Z " /><path fill="rgb(30,52,178)" stroke="rgb(30,52,178)" stroke-width="1" opacity="1" d="M 28 0 Q 34 -2 32 4 Q 26 2 28 8 L 24 8 L 24 4 Q 30 6 28 0 Z " /><path fill="rgb(30,52,178)" stroke="rgb(30,52,178)" stroke-width="1" opacity="1" d="M 8 8 Q 14 6 12 12 Q 6 14 8 8 Z " /><path fill="rgb(30,52,178)" stroke="rgb(30,52,178)" stroke-width="1" opacity="1" d="M 0 12 L 4 12 L 4 20 L 0 20 L 0 12 Z " /><path fill="rgb(30,52,178)" stroke="rgb(30,52,178)" stroke-width="1" opacity="1" d="M 28 12 Q 34 10 32 16 Q 26 14 28 20 Q 34 18 32 24 L 28 24 L 28 20 Q 22 22 24 16 Q 30 18 28 12 Z " /><path fill="rgb(29,51,177)" stroke="rgb(29,51,177)" stroke-width="1" opacity="1" d="M 0 0 Q 6 -2 4 4 Q -2 6 0 0 Z " /><path fill="rgb(29,51,177)" stroke="rgb(29,51,177)" stroke-width="1" opacity="1" d="M 16 0 Q 22 -2 20 4 Q 14 6 16 0 Z " /><path fill="rgb(29,51,177)" stroke="rgb(29,51,177)" stroke-width="1" opacity="1" d="M 24 0 Q 30 -2 28 4 Q 22 6 24 0 Z " /><path fill="rgb(29,51,177)" stroke="rgb(29,51,177)" stroke-width="1" opacity="1" d="M 4 12 L 8 12 L 8 20 L 4 20 L 4 12 Z " /><path fill="rgb(29,51,177)" stroke="rgb(29,51,177)" stroke-width="1" opacity="1" d="M 20 12 Q 26 10 24 16 L 20 16 Q 22 22 16 20 L 16 16 Q 22 18 20 12 Z " /><path fill="rgb(29,51,177)" stroke="rgb(29,51,177)" stroke-width="1" opacity="1" d="M 0 24 Q 6 22 4 28 Q -2 30 0 24 Z " /><path fill="rgb(29,51,177)" stroke="rgb(29,51,177)" stroke-width="1" opacity="1" d="M 8 24 Q 14 22 12 28 Q 6 30 8 24 Z " /><path fill="rgb(29,51,177)" stroke="rgb(29,51,177)" stroke-width="1" opacity="1" d="M 16 24 Q 22 22 20 28 Q 14 30 16 24 Z " /><path fill="rgb(29,51,177)" stroke="rgb(29,51,177)" stroke-width="1" opacity="1" d="M 28 24 Q 34 22 32 28 Q 26 30 28 24 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 4 4 Q 10 2 8 8 Q 2 10 4 4 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 12 4 Q 18 2 16 8 Q 10 10 12 4 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 20 4 Q 26 2 24 8 Q 18 10 20 4 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 32 4 L 63.5 4 L 64 8 L 32.5 8 L 32 4 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 8 12 Q 14 10 12 16 Q 6 18 8 12 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 16 12 Q 22 10 20 16 Q 14 18 16 12 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 24 12 Q 30 10 28 16 Q 22 18 24 12 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 32 12 L 63.5 12 L 64 16 L 32.5 16 L 32 12 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 4 20 Q 10 18 8 24 Q 2 26 4 20 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 12 20 Q 18 18 16 24 Q 10 26 12 20 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 20 20 Q 26 18 24 24 Q 18 26 20 20 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 32 20 L 63.5 20 L 64 24 L 32.5 24 L 32 20 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 0 28 L 63.5 28 L 64 32 L 0.5 32 L 0 28 Z " /><path fill="rgb(255,255,255)" stroke="rgb(255,255,255)" stroke-width="1" opacity="1" d="M 0 36 L 63.5 36 L 64 40 L 0.5 40 L 0 36 Z " /></svg>
\ No newline at end of file
diff --git a/src/test/java/gov/usgs/earthquake/nshmp/model/GenerateActual.java b/src/test/java/gov/usgs/earthquake/nshmp/model/GenerateActual.java
index 8996fb07eab4d24e9aa3d09ff4f3f2248ab08e11..2b6f778b333de48edfbf57ab0b06a73bc2ee836f 100644
--- a/src/test/java/gov/usgs/earthquake/nshmp/model/GenerateActual.java
+++ b/src/test/java/gov/usgs/earthquake/nshmp/model/GenerateActual.java
@@ -6,10 +6,6 @@ import java.util.concurrent.ExecutionException;
 
 import gov.usgs.earthquake.nshmp.model.NshmTestUtils.Nshm;
 import gov.usgs.earthquake.nshmp.model.NshmTestUtils.NshmModel;
-import gov.usgs.earthquake.nshmp.www.Application;
-
-import io.micronaut.context.ApplicationContext;
-import io.micronaut.runtime.Micronaut;
 
 /**
  * Generate actual results to compare to expected results.
@@ -29,12 +25,13 @@ class GenerateActual {
     NshmTestUtils.writeExpecteds(nshmModel, Optional.of(NshmTests.DATA_PATH));
     nshmModel.exec.shutdown();
 
-    // Generate web
-    ApplicationContext context = Micronaut
-        .build("--model=" + nshm.modelPath())
-        .mainClass(Application.class)
-        .start();
-    NshmTestUtils.writeWebExpecteds(nshm, Optional.of(NshmTests.WEB_DATA_PATH));
-    context.close();
+    // // Generate web
+    // ApplicationContext context = Micronaut
+    // .build("--model=" + nshm.modelPath())
+    // .mainClass(Application.class)
+    // .start();
+    // NshmTestUtils.writeWebExpecteds(nshm,
+    // Optional.of(NshmTests.WEB_DATA_PATH));
+    // context.close();
   }
 }
diff --git a/src/test/java/gov/usgs/earthquake/nshmp/model/NshmTestUtils.java b/src/test/java/gov/usgs/earthquake/nshmp/model/NshmTestUtils.java
index 656649be1cb13202e679be92b7a3731e67f4a326..12312f75fa77701c6a4e9b07037f8d456fe3e087 100644
--- a/src/test/java/gov/usgs/earthquake/nshmp/model/NshmTestUtils.java
+++ b/src/test/java/gov/usgs/earthquake/nshmp/model/NshmTestUtils.java
@@ -122,7 +122,7 @@ class NshmTestUtils {
 
     if (dataPath.isEmpty()) {
       context = Optional.of(Micronaut
-          .build("--model=" + nshm.modelPath())
+          .build("--MODEL=" + nshm.modelPath())
           .mainClass(Application.class)
           .start());
     }
diff --git a/src/test/java/gov/usgs/earthquake/nshmp/model/NshmTests.java b/src/test/java/gov/usgs/earthquake/nshmp/model/NshmTests.java
index d4280e285c7f4cc5e74ae506d150132bd2903ec5..e3fe8d7211509c08828a3256b656e8441e700842 100644
--- a/src/test/java/gov/usgs/earthquake/nshmp/model/NshmTests.java
+++ b/src/test/java/gov/usgs/earthquake/nshmp/model/NshmTests.java
@@ -135,7 +135,7 @@ class NshmTests {
   final void testAlaska2007() throws IOException, InterruptedException, ExecutionException {
     Nshm nshm = NSHMS.get("nshm-alaska-2007");
     NshmTestUtils.testNshm(nshm, getDataPath(nshm));
-    NshmTestUtils.testWebNshm(nshm, getWebDataPath(nshm));
+    // NshmTestUtils.testWebNshm(nshm, getWebDataPath(nshm));
   }
 
   /**
@@ -149,7 +149,7 @@ class NshmTests {
   final void testAlaska2023() throws IOException, InterruptedException, ExecutionException {
     Nshm nshm = NSHMS.get("nshm-alaska-2023");
     NshmTestUtils.testNshm(nshm, getDataPath(nshm));
-    NshmTestUtils.testWebNshm(nshm, getWebDataPath(nshm));
+    // NshmTestUtils.testWebNshm(nshm, getWebDataPath(nshm));
   }
 
   /**
@@ -163,7 +163,7 @@ class NshmTests {
   final void testConus2018() throws IOException, InterruptedException, ExecutionException {
     Nshm nshm = NSHMS.get("nshm-conus-2018");
     NshmTestUtils.testNshm(nshm, getDataPath(nshm));
-    NshmTestUtils.testWebNshm(nshm, getWebDataPath(nshm));
+    // NshmTestUtils.testWebNshm(nshm, getWebDataPath(nshm));
   }
 
   /**
@@ -177,7 +177,7 @@ class NshmTests {
   final void testConus2023() throws IOException, InterruptedException, ExecutionException {
     Nshm nshm = NSHMS.get("nshm-conus-2023");
     NshmTestUtils.testNshm(nshm, getDataPath(nshm));
-    NshmTestUtils.testWebNshm(nshm, getWebDataPath(nshm));
+    // NshmTestUtils.testWebNshm(nshm, getWebDataPath(nshm));
   }
 
   /**
@@ -191,7 +191,7 @@ class NshmTests {
   final void testHawaii2021() throws IOException, InterruptedException, ExecutionException {
     Nshm nshm = NSHMS.get("nshm-hawaii-2021");
     NshmTestUtils.testNshm(nshm, getDataPath(nshm));
-    NshmTestUtils.testWebNshm(nshm, getWebDataPath(nshm));
+    // NshmTestUtils.testWebNshm(nshm, getWebDataPath(nshm));
   }
 
   /**
diff --git a/ws.Dockerfile b/ws.Dockerfile
index 3a61732e451a3b758fd1b946e4412165512b957a..02146842ded64764469e5e630f3be5d2fbb5f764 100644
--- a/ws.Dockerfile
+++ b/ws.Dockerfile
@@ -72,4 +72,4 @@ ENTRYPOINT java \
     -jar \
     nshmp-haz.jar \
     "-Dmicronaut.server.context-path=${CONTEXT_PATH}" \
-    --model="${MODELS_DIRECTORY}";
+    --MODEL="${MODELS_DIRECTORY}";