diff --git a/src/main/java/gov/usgs/earthquake/nshmp/DeaggCalc.java b/src/main/java/gov/usgs/earthquake/nshmp/DeaggCalc.java
index ff0e19917b8e650716f1d1ca2053a0f3f023c3f0..05ad820447210cfef01a2baf498696096f30ca8f 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/DeaggCalc.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/DeaggCalc.java
@@ -17,7 +17,7 @@ import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.MoreExecutors;
 
 import gov.usgs.earthquake.nshmp.calc.CalcConfig;
-import gov.usgs.earthquake.nshmp.calc.Deaggregation;
+import gov.usgs.earthquake.nshmp.calc.Disaggregation;
 import gov.usgs.earthquake.nshmp.calc.Hazard;
 import gov.usgs.earthquake.nshmp.calc.HazardCalcs;
 import gov.usgs.earthquake.nshmp.calc.HazardExport;
@@ -89,7 +89,7 @@ public class DeaggCalc {
       if (argCount == 4) {
         Path userConfigPath = Paths.get(args[3]);
         config = CalcConfig.copyOf(model.config())
-            .extend(CalcConfig.fromFile(userConfigPath))
+            .extend(CalcConfig.from(userConfigPath))
             .build();
       }
       log.info(config.toString());
@@ -145,8 +145,8 @@ public class DeaggCalc {
 
     for (Site site : sites) {
       Hazard hazard = HazardCalcs.hazard(model, config, site, exec);
-      Deaggregation deagg = HazardCalcs.deaggReturnPeriod(hazard, returnPeriod, exec);
-      handler.write(hazard, Optional.of(deagg));
+      Disaggregation disagg = HazardCalcs.disaggReturnPeriod(hazard, returnPeriod, exec);
+      handler.write(hazard, Optional.of(disagg));
       log.fine(hazard.toString());
     }
     handler.expire();
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/DeaggEpsilon.java b/src/main/java/gov/usgs/earthquake/nshmp/DeaggEpsilon.java
index 7fae94112cd7aa8f6376935ec5ee7ebd8eb6bee6..8fec4b64a3ed5f52f354309cf9f37485a9432b18 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/DeaggEpsilon.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/DeaggEpsilon.java
@@ -32,7 +32,7 @@ import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
 import gov.usgs.earthquake.nshmp.calc.CalcConfig;
-import gov.usgs.earthquake.nshmp.calc.Deaggregation;
+import gov.usgs.earthquake.nshmp.calc.Disaggregation;
 import gov.usgs.earthquake.nshmp.calc.Hazard;
 import gov.usgs.earthquake.nshmp.calc.HazardCalcs;
 import gov.usgs.earthquake.nshmp.calc.Site;
@@ -110,11 +110,11 @@ public class DeaggEpsilon {
       if (argCount == 3) {
         Path userConfigPath = Paths.get(args[2]);
         wusConfig = CalcConfig.copyOf(wusModel.config())
-            .extend(CalcConfig.fromFile(userConfigPath))
+            .extend(CalcConfig.from(userConfigPath))
             .imts(EnumSet.copyOf(imts))
             .build();
         ceusConfig = CalcConfig.copyOf(ceusModel.config())
-            .extend(CalcConfig.fromFile(userConfigPath))
+            .extend(CalcConfig.from(userConfigPath))
             .imts(EnumSet.copyOf(imts))
             .build();
       }
@@ -240,7 +240,7 @@ public class DeaggEpsilon {
               ? wusHazard
               : Hazard.merge(wusHazard, ceusHazard);
 
-      Deaggregation deagg = Deaggregation.atImls(cousHazard, spectrum, exec);
+      Disaggregation disagg = Disaggregation.atImls(cousHazard, spectrum, exec);
 
       List<Response> responses = new ArrayList<>(spectrum.size());
       for (Imt imt : wusConfig.hazard.imts) {
@@ -249,7 +249,7 @@ public class DeaggEpsilon {
             site,
             imt,
             spectrum.get(imt));
-        Response response = new Response(imtMetadata, deagg.toJsonCompact(imt));
+        Response response = new Response(imtMetadata, disagg.toJsonCompact(imt));
         responses.add(response);
       }
       Result result = new Result(responses);
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/DeaggIml.java b/src/main/java/gov/usgs/earthquake/nshmp/DeaggIml.java
index e785071cc85683e9fd27acc9e3f610d8adcf119f..3cc37d5d06ec4cd7811e75c9e5c04570229504d5 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/DeaggIml.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/DeaggIml.java
@@ -17,7 +17,7 @@ import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.MoreExecutors;
 
 import gov.usgs.earthquake.nshmp.calc.CalcConfig;
-import gov.usgs.earthquake.nshmp.calc.Deaggregation;
+import gov.usgs.earthquake.nshmp.calc.Disaggregation;
 import gov.usgs.earthquake.nshmp.calc.Hazard;
 import gov.usgs.earthquake.nshmp.calc.HazardCalcs;
 import gov.usgs.earthquake.nshmp.calc.HazardExport;
@@ -90,7 +90,7 @@ public class DeaggIml {
       if (argCount == 4) {
         Path userConfigPath = Paths.get(args[3]);
         config = CalcConfig.copyOf(model.config())
-            .extend(CalcConfig.fromFile(userConfigPath))
+            .extend(CalcConfig.from(userConfigPath))
             .build();
       }
       log.info(config.toString());
@@ -146,8 +146,8 @@ public class DeaggIml {
 
     for (Site site : sites) {
       Hazard hazard = HazardCalcs.hazard(model, config, site, exec);
-      Deaggregation deagg = HazardCalcs.deaggIml(hazard, iml, exec);
-      handler.write(hazard, Optional.of(deagg));
+      Disaggregation disagg = HazardCalcs.disaggIml(hazard, iml, exec);
+      handler.write(hazard, Optional.of(disagg));
       log.fine(hazard.toString());
     }
     handler.expire();
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/Hazard2018.java b/src/main/java/gov/usgs/earthquake/nshmp/Hazard2018.java
index 1c68fa0373773537185b6635aa1e0e382c39853d..60df02d9bc6db0ee0cc9213bfbb243044390c040 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/Hazard2018.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/Hazard2018.java
@@ -87,7 +87,7 @@ public class Hazard2018 {
       CalcConfig wusConfig = wusModel.config();
       CalcConfig ceusConfig = ceusModel.config();
       if (argCount == 3) {
-        CalcConfig.Builder userConfig = CalcConfig.fromFile(Paths.get(args[2]));
+        CalcConfig.Builder userConfig = CalcConfig.from(Paths.get(args[2]));
         wusConfig = CalcConfig.copyOf(wusModel.config())
             .extend(userConfig)
             .build();
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/HazardCalc.java b/src/main/java/gov/usgs/earthquake/nshmp/HazardCalc.java
index dd7defad54d8d72a9ebefbc5e98d65cd85f93a83..4e788b9a865ef4fc260eaa3f72d230a4235fc144 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/HazardCalc.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/HazardCalc.java
@@ -101,7 +101,7 @@ public class HazardCalc {
       if (argCount == 3) {
         Path userConfigPath = Paths.get(args[2]);
         config = CalcConfig.copyOf(model.config())
-            .extend(CalcConfig.fromFile(userConfigPath))
+            .extend(CalcConfig.from(userConfigPath))
             .build();
       }
       log.info(config.toString());
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/RateCalc.java b/src/main/java/gov/usgs/earthquake/nshmp/RateCalc.java
index 70da548aed8fa75f54fbb2c38a5c684ca83e138d..c3afa5fc01814e453bb332d01e951f6843370b72 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/RateCalc.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/RateCalc.java
@@ -99,7 +99,7 @@ public class RateCalc {
       if (argCount == 3) {
         Path userConfigPath = Paths.get(args[2]);
         config = CalcConfig.copyOf(model.config())
-            .extend(CalcConfig.fromFile(userConfigPath))
+            .extend(CalcConfig.from(userConfigPath))
             .build();
       }
       log.info(config.toString());
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/services/DeaggEpsilonService.java b/src/main/java/gov/usgs/earthquake/nshmp/www/services/DeaggEpsilonService.java
index ada6f9dc38fb48616c06a8cb7c0e4fae104d54c5..dde97c59b4c24e1a8fe1b0ae58b550cb51fd632e 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/services/DeaggEpsilonService.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/services/DeaggEpsilonService.java
@@ -3,6 +3,7 @@ package gov.usgs.earthquake.nshmp.www.services;
 import java.net.URL;
 import java.util.EnumMap;
 import java.util.List;
+import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.function.Function;
 
@@ -12,7 +13,7 @@ import com.google.common.base.Stopwatch;
 import com.google.common.collect.ImmutableList;
 
 import gov.usgs.earthquake.nshmp.calc.CalcConfig;
-import gov.usgs.earthquake.nshmp.calc.Deaggregation;
+import gov.usgs.earthquake.nshmp.calc.Disaggregation;
 import gov.usgs.earthquake.nshmp.calc.Site;
 import gov.usgs.earthquake.nshmp.geo.Location;
 import gov.usgs.earthquake.nshmp.gmm.Imt;
@@ -24,7 +25,6 @@ import gov.usgs.earthquake.nshmp.www.meta.Metadata;
 import gov.usgs.earthquake.nshmp.www.meta.Status;
 import gov.usgs.earthquake.nshmp.www.services.ServicesUtil.Key;
 import gov.usgs.earthquake.nshmp.www.services.SourceServices.SourceModel;
-
 import io.micronaut.context.annotation.Value;
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
@@ -94,7 +94,7 @@ public final class DeaggEpsilonService {
     var siteFunction = new SiteFunction(data);
     var timer = Stopwatch.createStarted();
     var hazard = ServicesUtil.calcHazard(configFunction, siteFunction);
-    var deagg = Deaggregation.atImls(hazard, data.imtImls, ServletUtil.CALC_EXECUTOR);
+    var deagg = Disaggregation.atImls(hazard, data.imtImls, ServletUtil.CALC_EXECUTOR);
     return new ResultBuilder()
         .deagg(deagg)
         .requestData(data)
@@ -160,7 +160,7 @@ public final class DeaggEpsilonService {
     public Site apply(CalcConfig config) {
       return Site.builder()
           .location(Location.create(data.longitude, data.latitude))
-          .basinDataProvider(data.basin ? basinUrl : null)
+          .dataService(data.basin ? Optional.of(basinUrl) : Optional.empty())
           .vs30(data.vs30)
           .build();
     }
@@ -189,7 +189,7 @@ public final class DeaggEpsilonService {
     final String εlabel = "% Contribution to Hazard";
     final Object εbins;
 
-    ResponseMetadata(Deaggregation deagg, RequestData request, Imt imt) {
+    ResponseMetadata(Disaggregation deagg, RequestData request, Imt imt) {
       this.models = new SourceModel(ServletUtil.model());
       this.longitude = request.longitude;
       this.latitude = request.latitude;
@@ -224,9 +224,9 @@ public final class DeaggEpsilonService {
     String url;
     Stopwatch timer;
     RequestData request;
-    Deaggregation deagg;
+    Disaggregation deagg;
 
-    ResultBuilder deagg(Deaggregation deagg) {
+    ResultBuilder deagg(Disaggregation deagg) {
       this.deagg = deagg;
       return this;
     }
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 5210a78fe7feba6bf8592a1d3f9e78402485cd72..6a949cba0640245c0568b86c831741d87b09e79e 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
@@ -35,7 +35,6 @@ import gov.usgs.earthquake.nshmp.www.meta.Status;
 import gov.usgs.earthquake.nshmp.www.services.ServicesUtil.ServiceQueryData;
 import gov.usgs.earthquake.nshmp.www.services.ServicesUtil.ServiceRequestData;
 import gov.usgs.earthquake.nshmp.www.services.SourceServices.SourceModel;
-
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
 
@@ -119,7 +118,7 @@ public final class HazardService {
     @Override
     public Site apply(CalcConfig config) {
       return Site.builder()
-          .basinDataProvider(config.siteData.basinDataProvider)
+          .dataService(config.siteData.service)
           .location(Location.create(data.longitude, data.latitude))
           .vs30(data.vs30)
           .build();