diff --git a/.gitignore b/.gitignore
index 9cbbe5b5883e1856a942be118a737a9b86874e58..dab00aa60f6758ecef4da1d4b823146b4b16c659 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,5 @@ webapp/config.json
 config.properties
 swagger-files
 libs
+.factorypath
+.apt_*
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 871d4f194ab19e8646f305e226632c8a2a11e1f9..971caf9423534d86ef99c6bcd841ebe5bd09ced3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,13 +25,8 @@ stages:
 ####
 .templates:
   install-aws: &install-aws |-
-    apk -v --update add --no-cache python py-pip groff;
+    apk -v --update add --no-cache python3 py-pip groff;
     pip install awscli;
-  nshmp-lib: &nshmp-lib |-
-    cd ..;
-    rm -rf ${NSHMP_LIB};
-    git clone ${NSHMP_LIB_GIT};
-    cd ${CI_PROJECT_NAME};
   static-data: &static-data |-
     STATIC_DATA="
       ${DATA_CONUS_2018A}
@@ -147,7 +142,7 @@ Unit Tests:
   image: gradle:jdk11
   extends: .dev-tags
   only:
-    - branch
+    - branches
     - master@ghsc/nshmp/nshmp-netcdf
     - tags@ghsc/nshmp/nshmp-netcdf
   coverage: '/Total.*?([0-9]{1,3})%/'
diff --git a/build.gradle b/build.gradle
index 0e5d706b97dd7e0ba9d7b2d7a1e28ec245de9aae..4afb7b48952a215e2896070a5f3b989961abbf0e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,13 +1,13 @@
 plugins {
   id "application"
-  id "com.diffplug.gradle.spotless" version "3.27.1"
-  id "com.github.johnrengelman.shadow" version "5.2.0"
-  id "com.github.spotbugs" version "3.0.0"
-  id "com.star-zero.gradle.githook" version "1.2.0"
+  id "com.diffplug.gradle.spotless" version "${spotlessVersion}"
+  id "com.github.johnrengelman.shadow" version "${shadowVersion}"
+  id "com.github.spotbugs" version "${spotbugsVersion}"
+  id "com.star-zero.gradle.githook" version "${githooksVersion}"
   id "eclipse-wtp"
   id "jacoco"
   id "java"
-  id "net.ltgt.apt-eclipse" version "0.21"
+  id "net.ltgt.apt-eclipse" version "${aptEclipseVersion}"
 }
 
 sourceCompatibility = JavaVersion.VERSION_11
@@ -26,7 +26,7 @@ repositories {
 git {
   implementation("https://code.usgs.gov/ghsc/nshmp/nshmp-lib.git", {
     name "nshmp-netcdf-dep--nshmp-lib"
-    tag "v0.0.5"
+    tag "v0.1.1"
   })
 }
 
@@ -106,11 +106,12 @@ tasks.withType(JavaExec) {
 }
 
 /* Add HTML reports to SpotBugs */
-tasks.withType(com.github.spotbugs.SpotBugsTask) {
-  ignoreFailures = false // TODO remove when nshmp-lib is updated
+tasks.withType(com.github.spotbugs.snom.SpotBugsTask) {
   reports {
-    xml.enabled = false
-    html.enabled = true
+    html {
+      enabled true
+      stylesheet = 'fancy-hist.xsl'
+    }
   }
 }
 
diff --git a/gradle.properties b/gradle.properties
index 17f0e3514c60deaffdf5c3d95699838c9d2e5c59..068b7622f8e15ba7f7c5ab339f417dc153c60778 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,9 +1,14 @@
+aptEclipseVersion = 0.21
 cdmVersion = 5.1.0
+githooksVersion = 1.2.0
 jacksonVersion = 2.9.0
 junitVersion = 5.5.2
 logbackVersion = 1.2.3
+mnOpenAPIVersion = 1.4.0
 mnVersion = 1.3.2
 netcdfVersion = 5.1.0
+shadowVersion = 5.2.0
 slfVersion = 1.7.30
+spotbugsVersion = 4.2.4
+spotlessVersion = 4.1.0
 swaggerVersion = 2.1.1
-mnOpenAPIVersion = 1.4.0
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/SiteClass.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/SiteClass.java
index d6a2d54ad164727e153757a9b8160e3f13109904..96eb4d3cf7060c6e61b1da01a8df9a7567595349 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/SiteClass.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/SiteClass.java
@@ -5,10 +5,10 @@ import java.util.Arrays;
 /**
  * This should be imported. For now, it is copied from
  * nshmp-haz-v2/src/gov.usgs.earthquake.nshmp.site.NehrpSiteClass.java
- * 
+ *
  * Placeholder enum for likely move to Nehrp site class identifier instead of
  * Vs30.
- * 
+ *
  * <p>These site class identifiers map to NEHRP site clases, but the intent is
  * that they can be used more generally for models in other parts of the world
  * where the GMMs are not necessarily parameterized in terms of vs30 to define
@@ -19,24 +19,24 @@ import java.util.Arrays;
  * are supported (in 2018) across the entire U.S., there have been changes
  * proposed for balloting by the BSSC to make the Vs30 definitions of site
  * classes consistent in how they are calculated.
- * 
+ *
  * @author Peter Powers
  */
 public enum SiteClass {
 
   /*
    * Notes on calculation of Vs30 for site class:
-   * 
+   *
    * Question: Why is it that the soil shear wave velocity shown in the Unified
    * Hazard Tool is not equal to the average of the values shown in ASCE 7-10
    * table 20.3-1?
-   * 
+   *
    * For instance: 259 m/s (Site Class D), from the Unified Hazard Tool, is not
    * equal to (600 ft/s + 1200 ft/s)/2 * .3048 = 274 m/s
-   * 
+   *
    * Answer (Sanaz): we take the geometric mean: sqrt(1200*600)*0.3048 =
    * 258.6314 , which rounds to 259m/s.
-   * 
+   *
    *
    */
 
@@ -86,7 +86,7 @@ public enum SiteClass {
 
   /**
    * Returns a {@code SiteClass} associated with the vs30.
-   * 
+   *
    * @param vs30 The vs30 of the site class
    */
   public static SiteClass ofValue(int vs30) {
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 338f0664003be437eeac47f3a64062bd9e95bd8d..cdf0c9d4a0c5e189a4692fb525cd8a34614c79cf 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
@@ -18,7 +18,7 @@ import ucar.nc2.dataset.NetcdfDataset;
 
 /**
  * Container for gridded hazard curves at four closest grid points to target
- * 
+ *
  * @author U.S. Geological Survey
  */
 public class BoundingHazardsReader {
@@ -202,7 +202,7 @@ public class BoundingHazardsReader {
     final int[] origin;
 
     BoundingLocation(double longitude, double latitude, int longitudeIndex, int latitudeIndex) {
-      location = Location.create(latitude, longitude);
+      location = Location.create(longitude, latitude);
       origin = new int[] { 0, 0, latitudeIndex, longitudeIndex, 0 };
     }
   }
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtils.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtils.java
index dfd4f874f7117dca03d0f22a3383826bc1d3dd2a..503b8f742abd39a27d27d9f30e4d2144909b0541 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtils.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtils.java
@@ -23,7 +23,7 @@ public class NetcdfUtils {
 
   /**
    * Creates a border going clockwise of the given longitudes and latitudes.
-   * 
+   *
    * @param longitudes The longitudes
    * @param latitudes The latitudes
    * @return
@@ -32,20 +32,20 @@ public class NetcdfUtils {
     var builder = LocationList.builder();
 
     for (var lat : latitudes) {
-      builder.add(lat, longitudes[0]);
+      builder.add(longitudes[0], lat);
     }
 
     // omit duplicate points at corners
     for (var i = 1; i < longitudes.length; i++) {
-      builder.add(latitudes[latitudes.length - 1], longitudes[i]);
+      builder.add(longitudes[i], latitudes[latitudes.length - 1]);
     }
 
     for (var i = latitudes.length - 2; i >= 0; i--) {
-      builder.add(latitudes[i], longitudes[longitudes.length - 1]);
+      builder.add(longitudes[longitudes.length - 1], latitudes[i]);
     }
 
     for (var i = longitudes.length - 2; i >= 0; i--) {
-      builder.add(latitudes[0], longitudes[i]);
+      builder.add(longitudes[i], latitudes[0]);
     }
 
     return builder.build();
@@ -53,7 +53,7 @@ public class NetcdfUtils {
 
   /**
    * Returns a {@code double[]} from a netCDF group
-   * 
+   *
    * @param group The netCDF group
    * @param key The key to read from the group
    * @throws IOException
@@ -64,7 +64,7 @@ public class NetcdfUtils {
 
   /**
    * Returns a {@code int[]} from a netCDF group
-   * 
+   *
    * @param group The netCDF group
    * @param key The key to read from the group
    * @throws IOException
@@ -75,7 +75,7 @@ public class NetcdfUtils {
 
   /**
    * Get a 1D array from a netCDF group.
-   * 
+   *
    * @param group The netCDF group
    * @param key The key to read from the group
    * @param dataType The data type to read
@@ -186,8 +186,8 @@ public class NetcdfUtils {
   /**
    * Checks bounding hazard maps contain the same: Site classes, IMTs per each
    * site class, and ground motions per each IMT
-   * 
-   * 
+   *
+   *
    * @param boundingHazards The bounding hazards
    */
   static void checkBoundingHazards(
@@ -204,7 +204,7 @@ public class NetcdfUtils {
   /**
    * Check whether bounding hazards contain the same: Site classes, IMTs per
    * each site class, and ground motions per each IMT
-   * 
+   *
    * @param a Bounding hazard map A
    * @param b Bounding hazard map B
    */
@@ -219,7 +219,7 @@ public class NetcdfUtils {
   /**
    * Check whether hazards contain the same: IMTs and ground motions per each
    * IMT
-   * 
+   *
    * @param a Hazard A
    * @param b Hazard B
    */
@@ -231,7 +231,7 @@ public class NetcdfUtils {
 
   /**
    * Check that the X values are identical.
-   * 
+   *
    * @param a Sequence A
    * @param b Sequence B
    */
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/swagger/UpdateSwagger.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/swagger/UpdateSwagger.java
index 9f70441a2e2b89bab4c85ffe6a1dad919b0caec6..8da40c2fd24c09f5a5fc974eb020f87c0a804d6f 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/swagger/UpdateSwagger.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/swagger/UpdateSwagger.java
@@ -19,7 +19,7 @@ import io.swagger.v3.oas.models.PathItem;
 
 /**
  * Create Swagger files for each model and update context path.
- * 
+ *
  * @author U.S. Geological Survey
  */
 class UpdateSwagger {
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 b438e8574df7b66dbfcd9b3b951ed4cdd802e748..c5625d1f7b25e9aba44df840bb97f7d5b85c23f9 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
@@ -28,9 +28,9 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 /**
  * Micronaut controller for getting static hazards for a specific
  * {@code NshmGroup} from a NetCDF file.
- * 
+ *
  * @see NetcdfService
- * 
+ *
  * @author U.S. Geological Survey
  */
 @Tag(name = "Hazard Data")
@@ -48,7 +48,7 @@ public class NetcdfController {
 
   /**
    * GET method to return the usage information on the NetCDF web service.
-   * 
+   *
    * @param request The HTTP request
    */
   @Operation(
@@ -67,7 +67,7 @@ public class NetcdfController {
 
   /**
    * GET method to return a hazard curve using URL query.
-   * 
+   *
    * @param request The HTTP request
    * @param longitude The longitude of the site
    * @param latitude Latitude of the site
@@ -98,7 +98,7 @@ public class NetcdfController {
 
   /**
    * GET method to return a hazard curve using slash delimited.
-   * 
+   *
    * @param request The HTTP request
    * @param longitude The longitude of the site
    * @param latitude Latitude of the site
@@ -127,7 +127,7 @@ public class NetcdfController {
 
   /**
    * GET method to return hazard curves using slash delimited.
-   * 
+   *
    * @param request The HTTP request
    * @param longitude The longitude of the site
    * @param latitude Latitude of the site
@@ -154,7 +154,7 @@ public class NetcdfController {
 
   /**
    * GET method to return hazard curves using slash delimited.
-   * 
+   *
    * @param request The HTTP request
    * @param longitude The longitude of the site
    * @param latitude Latitude of the site
@@ -179,7 +179,7 @@ public class NetcdfController {
 
   /**
    * Returns the border as a GeoJSON feature collections.
-   * 
+   *
    * @param request The HTTP request
    */
   @Operation(
@@ -199,7 +199,7 @@ public class NetcdfController {
 
   /**
    * GET method to return the bounding hazards using URL query.
-   * 
+   *
    * @param request The HTTP request
    * @param longitude The longitude
    * @param latitude The latitude
@@ -217,7 +217,7 @@ public class NetcdfController {
 
   /**
    * GET method to return the bounding hazards using slash delimited.
-   * 
+   *
    * @param request The HTTP request
    * @param longitude The longitude
    * @param latitude The latitude
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 003f2c3d07204b05218f97cabd7b769fd0f802ef..72102fcfc77967f151592d3ec6da11738cd273fb 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
@@ -31,9 +31,9 @@ import io.micronaut.http.HttpResponse;
 
 /**
  * Service handler for {@code NetcdfController}.
- * 
+ *
  * @see NetcdfController
- * 
+ *
  * @author U.S. Geological Survey
  */
 public class NetcdfService {
@@ -254,7 +254,7 @@ public class NetcdfService {
     Location site;
 
     RequestData(double longitude, double latitude) {
-      site = Location.create(latitude, longitude);
+      site = Location.create(longitude, latitude);
     }
   }
 
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
index f7f49d44d2952daea8299b55ab83db65c8952f46..f74e41693090ae1b24cabe0642f4ec814564c4a1 100644
--- a/src/main/resources/logback.xml
+++ b/src/main/resources/logback.xml
@@ -3,7 +3,7 @@
   <appender name="STDOUT"
     class="ch.qos.logback.core.ConsoleAppender">
     <withJansi>true</withJansi>
-    <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
+    <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder
       by default -->
     <encoder>
       <pattern>%cyan(%d{HH:mm:ss.SSS}) %gray([%thread])
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 157504f786b00aeb5e8cb960ffbf7d332651b691..1f07aafe4570bd9a08ea166a0e15aae4260bf401 100644
--- a/src/test/java/gov/usgs/earthquake/nshmp/netcdf/NshmNetcdfReaderTests.java
+++ b/src/test/java/gov/usgs/earthquake/nshmp/netcdf/NshmNetcdfReaderTests.java
@@ -41,17 +41,17 @@ public class NshmNetcdfReaderTests {
   public static final double IML_TOL = 1e-6;
   static final double HAZ_TOL = 1e-8;
 
-  static final Location TARGET_LOCATION = Location.create(39.213, -105.234);
+  static final Location TARGET_LOCATION = Location.create(-105.234, 39.213);
 
   public static final double[] EXPECTED_LONGITUDES =
       new double[] { -105.3, -105.25, -105.2, -105.15 };
   public static final double[] EXPECTED_LATITUDES = new double[] { 39.15, 39.2, 39.25, 39.3 };
 
   static final LocationList BOUNDING_LOCATIONS = LocationList.builder()
-      .add(EXPECTED_LATITUDES[1], EXPECTED_LONGITUDES[1])
-      .add(EXPECTED_LATITUDES[2], EXPECTED_LONGITUDES[1])
-      .add(EXPECTED_LATITUDES[2], EXPECTED_LONGITUDES[2])
-      .add(EXPECTED_LATITUDES[1], EXPECTED_LONGITUDES[2])
+      .add(EXPECTED_LONGITUDES[1], EXPECTED_LATITUDES[1])
+      .add(EXPECTED_LONGITUDES[1], EXPECTED_LATITUDES[2])
+      .add(EXPECTED_LONGITUDES[2], EXPECTED_LATITUDES[2])
+      .add(EXPECTED_LONGITUDES[2], EXPECTED_LATITUDES[1])
       .build();
 
   static final LocationList LOCATIONS = LocationList.builder()
diff --git a/src/test/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtilsTests.java b/src/test/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtilsTests.java
index 9e0f818a5856aac68584779c430ed4d6dbb57100..1a21d02b6829e6390993b71edd647f257633f0d0 100644
--- a/src/test/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtilsTests.java
+++ b/src/test/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtilsTests.java
@@ -45,11 +45,11 @@ class NetcdfUtilsTests {
   static {
 
     BORDER_LOCATIONS = LocationList.builder()
-        .add(BORDER_LATITUDES[0], BORDER_LONGITUDES[0])
-        .add(BORDER_LATITUDES[1], BORDER_LONGITUDES[0])
-        .add(BORDER_LATITUDES[1], BORDER_LONGITUDES[1])
-        .add(BORDER_LATITUDES[0], BORDER_LONGITUDES[1])
-        .add(BORDER_LATITUDES[0], BORDER_LONGITUDES[0])
+        .add(BORDER_LONGITUDES[0], BORDER_LATITUDES[0])
+        .add(BORDER_LONGITUDES[0], BORDER_LATITUDES[1])
+        .add(BORDER_LONGITUDES[1], BORDER_LATITUDES[1])
+        .add(BORDER_LONGITUDES[1], BORDER_LATITUDES[0])
+        .add(BORDER_LONGITUDES[0], BORDER_LATITUDES[0])
         .build();
 
     var siteClasses = List.of(SiteClass.B, SiteClass.C, SiteClass.D);