diff --git a/build.gradle b/build.gradle
index 33d9f5a71e90ad58d9215ba09fe2f9cc95408142..0c95cf8745a24e525db09980943c34e69a8a833a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -35,7 +35,7 @@ plugins {
   id "com.github.spotbugs" version "${spotbugsVersion}"
   id "com.star-zero.gradle.githook" version "${githooksVersion}"
   id "eclipse-wtp"
-  id "io.micronaut.application" version "${mnPluginVersion}"
+  id "io.micronaut.application" version "${micronautPluginVersion}"
   id "jacoco"
   id "maven-publish"
 }
diff --git a/gradle.properties b/gradle.properties
index ebd77a7e18d5ddf40d398189369608f02503d2e5..7961ce99a669dfb81ce4e8e6e8436fb2e4b3b9d3 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -5,13 +5,14 @@ awsS3Version = 1.11.579
 githooksVersion = 1.2.0
 jacksonVersion = 2.9.0
 junitVersion = 5.8.2
-micronautVersion = 2.4.1
-mnPluginVersion = 1.4.2
+micronautVersion = 3.2.3
+micronautRxVersion = 2.1.1
+micronautPluginVersion = 3.1.1
 nodePluginVersion = 3.0.1
 nodeVersion = 16.3.0
 nshmpLibVersion = 0.8.2
 nshmpWsUtilsVersion = 0.1.3
-shadowVersion = 7.1.1
+shadowVersion = 7.1.2
 spotbugsVersion = 4.7.0
 spotlessVersion = 6.0.4
 swaggerVersion = 2.1.7
diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle
index 8ec554bae75525d3c8e22e85ab8e6aa0a0fd7dde..2a81e3a09e2c2fb9f3dfbaa7a03a4c847efc020d 100644
--- a/gradle/dependencies.gradle
+++ b/gradle/dependencies.gradle
@@ -20,11 +20,13 @@ dependencies {
   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"
 
   // Swagger
-  annotationProcessor("io.micronaut.configuration:micronaut-openapi")
+  annotationProcessor("io.micronaut.openapi:micronaut-openapi")
   implementation("io.swagger.core.v3:swagger-annotations")
   implementation("io.swagger.core.v3:swagger-models")
 
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/HazardController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/HazardController.java
index a655b9fa49e768556e09d7f94ed31805ec4215cc..fdc74747815374a10fb5977cf022ceb16a05319a 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/HazardController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/HazardController.java
@@ -1,7 +1,5 @@
 package gov.usgs.earthquake.nshmp.www;
 
-import javax.inject.Inject;
-
 import gov.usgs.earthquake.nshmp.www.services.HazardService;
 import gov.usgs.earthquake.nshmp.www.services.HazardService.QueryParameters;
 
@@ -15,6 +13,7 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.inject.Inject;
 
 /**
  * Micronaut controller for probabilistic seismic hazard calculations.
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/RateController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/RateController.java
index 7dda0228dcf43b5082c526c3a700eb64a4e5f499..df15c1fdeb68712fe60169d4310be79e947482de 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/RateController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/RateController.java
@@ -2,8 +2,6 @@ package gov.usgs.earthquake.nshmp.www;
 
 import java.util.Optional;
 
-import javax.inject.Inject;
-
 import gov.usgs.earthquake.nshmp.www.services.RateService;
 import gov.usgs.earthquake.nshmp.www.services.RateService.Query;
 import gov.usgs.earthquake.nshmp.www.services.RateService.Service;
@@ -19,6 +17,7 @@ import io.micronaut.http.annotation.QueryValue;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import jakarta.inject.Inject;
 
 /**
  * Micronaut controller for rate and probability services.
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/SourceController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/SourceController.java
index b5713e6d59e1658338acb17c1c6437c2a00b8d4a..3c86ffe988cd66edea5179ef4cc64be0d0bbc54f 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/SourceController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/SourceController.java
@@ -1,7 +1,5 @@
 package gov.usgs.earthquake.nshmp.www;
 
-import javax.inject.Inject;
-
 import gov.usgs.earthquake.nshmp.www.services.SourceServices;
 
 import io.micronaut.http.HttpRequest;
@@ -12,6 +10,7 @@ import io.micronaut.http.annotation.Get;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.inject.Inject;
 
 /**
  * Source model service to return the current installed model.
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/SourceLogicTreesController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/SourceLogicTreesController.java
index 0e5aeba64c8f813b5ce7f1abacc8e87c53dc7746..7fe44c003dfce73020bbea90b956299703103535 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/SourceLogicTreesController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/SourceLogicTreesController.java
@@ -1,7 +1,5 @@
 package gov.usgs.earthquake.nshmp.www;
 
-import javax.inject.Inject;
-
 import gov.usgs.earthquake.nshmp.www.services.SourceLogicTreesService;
 
 import io.micronaut.http.HttpRequest;
@@ -12,6 +10,7 @@ import io.micronaut.http.annotation.PathVariable;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.inject.Inject;
 
 /**
  * Micronaut controller for NSHM source logic trees.
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 3df816b6c49bd00564a50906076369887e0e8f37..c2251caba5d3ed3612ed43e1aa8ca14404f7f381 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/SwaggerController.java
@@ -3,8 +3,6 @@ package gov.usgs.earthquake.nshmp.www;
 import java.nio.charset.StandardCharsets;
 import java.util.stream.Collectors;
 
-import javax.inject.Inject;
-
 import com.google.common.io.Resources;
 
 import gov.usgs.earthquake.nshmp.www.services.ServicesUtil;
@@ -16,6 +14,7 @@ import io.micronaut.http.annotation.Controller;
 import io.micronaut.http.annotation.Get;
 import io.swagger.v3.oas.annotations.Hidden;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.inject.Inject;
 
 /**
  * Expose OpenAPI YAML file.
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
index 356b1ff6f83a02479b551e42adf4dc650c6adeb5..32468d63800dcfd4989430a8b607ecfa65e62ef3 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
@@ -11,8 +11,6 @@ import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.function.Function;
 
-import javax.inject.Singleton;
-
 import com.google.common.base.Stopwatch;
 
 import gov.usgs.earthquake.nshmp.calc.CalcConfig;
@@ -38,6 +36,7 @@ import gov.usgs.earthquake.nshmp.www.services.SourceServices.SourceModel;
 
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
+import jakarta.inject.Singleton;
 
 /**
  * Probabilistic seismic hazard calculation handler for
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService2.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService2.java
index ca235f7f9d0657cfe8be5715bdcdd7c76343cae5..3e58e39dd09e3a90e60e10be299ba559e66e3d04 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService2.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService2.java
@@ -11,8 +11,6 @@ import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.function.Function;
 
-import javax.inject.Singleton;
-
 import com.google.common.base.Stopwatch;
 
 import gov.usgs.earthquake.nshmp.calc.CalcConfig;
@@ -37,6 +35,7 @@ import gov.usgs.earthquake.nshmp.www.services.SourceServices.SourceModel;
 
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
+import jakarta.inject.Singleton;
 
 /**
  * Probabilistic seismic hazard calculation handler for
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/RateService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/RateService.java
index ee29e210b48f1ad7fd0f5c1d5f08fe57cae0568f..e0772386ad74e3ec67898e042a095f92423431d7 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/RateService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/RateService.java
@@ -6,8 +6,6 @@ import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 
-import javax.inject.Singleton;
-
 import com.google.common.base.Stopwatch;
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -30,6 +28,7 @@ import gov.usgs.earthquake.nshmp.www.services.ServicesUtil.ServiceRequestData;
 
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
+import jakarta.inject.Singleton;
 
 /**
  * Earthquake probability and rate calculation handler service for
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/ServletUtil.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/ServletUtil.java
index 23e824d2ce62ef78d19989cdb7ac6adfee7bf914..81651afd7d44ac3d968008892b7e7d1dc03700eb 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/ServletUtil.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/ServletUtil.java
@@ -14,8 +14,6 @@ import java.util.HashMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-import javax.inject.Singleton;
-
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.gson.Gson;
@@ -36,6 +34,7 @@ import io.micronaut.context.annotation.Value;
 import io.micronaut.context.event.ShutdownEvent;
 import io.micronaut.context.event.StartupEvent;
 import io.micronaut.runtime.event.annotation.EventListener;
+import jakarta.inject.Singleton;
 
 /**
  * Micronaut controller utility objects and methods.
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceLogicTreesService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceLogicTreesService.java
index e867935c0f49265693851167a5746d49e483d9c1..823445be91ee7b52663a7445da3d05412b373a4a 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceLogicTreesService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceLogicTreesService.java
@@ -1,7 +1,5 @@
 package gov.usgs.earthquake.nshmp.www.services;
 
-import javax.inject.Singleton;
-
 import gov.usgs.earthquake.nshmp.model.Models;
 import gov.usgs.earthquake.nshmp.www.Response;
 import gov.usgs.earthquake.nshmp.www.SourceLogicTreesController;
@@ -9,6 +7,7 @@ import gov.usgs.earthquake.nshmp.www.meta.Status;
 
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
+import jakarta.inject.Singleton;
 
 /**
  * Source model tree handler for {@link SourceLogicTreesController}
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceServices.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceServices.java
index eb1fd728af424cf5210fd1ebe57d197760d8eaa8..7db7d76b57225955fe04edd5288ee220b1f0d9a6 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceServices.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/SourceServices.java
@@ -3,8 +3,6 @@ package gov.usgs.earthquake.nshmp.www.services;
 import java.util.Map;
 import java.util.Set;
 
-import javax.inject.Singleton;
-
 import com.google.common.base.Stopwatch;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
@@ -20,6 +18,7 @@ import gov.usgs.earthquake.nshmp.www.meta.Status;
 
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
+import jakarta.inject.Singleton;
 
 /**
  * Entry point for services related to source models. Current services:
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 08e17650b93dbaa71573a7e6b0d1913645bbd10e..d4d11ef0c76a2efa5215bacfdf56dc4f1d56d3e9 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -16,12 +16,6 @@ micronaut:
         logger-name: http
 
 nshmp-haz:
-  ##
-  # The basin service url
-  # To specify the url to use:
-  #     java -jar build/libs/nshmp-haz.jar --basin-service-url=
-  basin-service-url: ${basin-service-url:https://earthquake.usgs.gov/ws/nshmp/data/basin}
-
   ##
   # The path to the models.
   # To specify the model to use:
diff --git a/ws.Dockerfile b/ws.Dockerfile
index 8bf60131e37ace8518cbdc7674ce576f8d336941..35f812588039b169606d7e1b1b61079b0733bd88 100644
--- a/ws.Dockerfile
+++ b/ws.Dockerfile
@@ -42,7 +42,6 @@ FROM ${FROM_IMAGE}
 LABEL maintainer="Peter Powers <pmpowers@usgs.gov>, Brandon Clayton <bclayton@usgs.gov>"
 
 ENV CONTEXT_PATH="/"
-ENV BASIN_SERVICE_URL="https://earthquake.usgs.gov/ws/nshmp/data/basin"
 ENV JAVA_OPTS="-Xms2g -Xmx8g"
 ENV MODELS_DIRECTORY="/models"
 
@@ -59,5 +58,4 @@ ENTRYPOINT java \
     -jar \
     nshmp-haz.jar \
     "-Dmicronaut.server.context-path=${CONTEXT_PATH}" \
-    --basin-service-url="${BASIN_SERVICE_URL}" \
     --models="${MODELS_DIRECTORY}";