diff --git a/src/main/java/gov/usgs/earthquake/nshmp/calc/EqRateExport.java b/src/main/java/gov/usgs/earthquake/nshmp/calc/EqRateExport.java
index 1c1c4159278fb11b49485ed4e27cfc416dd870ff..3629306b7991b226f375ac5c0c3f5903c1b7ae4f 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/calc/EqRateExport.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/calc/EqRateExport.java
@@ -7,6 +7,7 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.List;
+import java.util.OptionalDouble;
 import java.util.function.Function;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
@@ -63,7 +64,7 @@ public final class EqRateExport {
     boolean rates = config.rate.valueFormat == ValueFormat.ANNUAL_RATE;
 
     this.log = log;
-    this.dir = HazardExport.createOutputDir(config.output.directory);
+    this.dir = HazardExport.createOutputDir(config.output.directory, OptionalDouble.empty());
     this.file = rates ? RATE_FILE : PROB_FILE;
     this.valueFormat = rates ? RATE_FORMAT : PROB_FORMAT;
     this.model = model;
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/calc/HazardExport.java b/src/main/java/gov/usgs/earthquake/nshmp/calc/HazardExport.java
index 4e526fde2d0b6b8048f26544335c51ed1da25ddc..451012eceb1c6d5063d09f37085f12a2d1a66357 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/calc/HazardExport.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/calc/HazardExport.java
@@ -20,6 +20,7 @@ import java.util.EnumSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.OptionalDouble;
 import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.IntStream;
@@ -80,9 +81,10 @@ public final class HazardExport {
   private HazardExport(
       HazardModel model,
       CalcConfig config,
-      List<Site> sites) throws IOException {
+      List<Site> sites,
+      OptionalDouble vs30) throws IOException {
 
-    this.dir = createOutputDir(config.output.directory);
+    this.dir = createOutputDir(config.output.directory, vs30);
     this.model = model;
     this.config = config;
     this.exportGmm = config.output.dataTypes.contains(DataType.GMM);
@@ -105,14 +107,16 @@ public final class HazardExport {
    * @param model being run
    * @param config that specifies output options and formats
    * @param sites reference to the sites to be processed (not retained)
+   * @param vs30 optional vs30 value used when running multiple site classes
    * @param log shared logging instance from calling class
    */
   public static HazardExport create(
       HazardModel model,
       CalcConfig config,
-      List<Site> sites) throws IOException {
+      List<Site> sites,
+      OptionalDouble vs30) throws IOException {
 
-    return new HazardExport(model, config, sites);
+    return new HazardExport(model, config, sites, vs30);
   }
 
   /* Initialize output directories. */
@@ -163,15 +167,19 @@ public final class HazardExport {
   }
 
   /* Avoid clobbering exsting result directories via incrementing. */
-  static Path createOutputDir(Path dir) throws IOException {
+  static Path createOutputDir(Path dir, OptionalDouble vs30) throws IOException {
     int i = 1;
-    Path incrementedDir = dir;
-    while (Files.exists(incrementedDir)) {
-      incrementedDir = incrementedDir.resolveSibling(dir.getFileName() + "-" + i);
+    Path outDir = dir;
+    while (Files.exists(outDir)) {
+      outDir = outDir.resolveSibling(dir.getFileName() + "-" + i);
       i++;
     }
-    Files.createDirectories(incrementedDir);
-    return incrementedDir;
+    if (vs30.isPresent()) {
+      String vs30dir = "vs30-" + ((int) vs30.getAsDouble());
+      outDir = outDir.resolve(vs30dir);
+    }
+    Files.createDirectories(outDir);
+    return outDir;
   }
 
   /**
diff --git a/src/test/java/gov/usgs/earthquake/nshmp/model/LoaderTests.java b/src/test/java/gov/usgs/earthquake/nshmp/model/LoaderTests.java
index f065ddf6c99932c4393fbdca38520ef1f6f12691..d7518714db457d7a47df746e2f3829df35acafe5 100644
--- a/src/test/java/gov/usgs/earthquake/nshmp/model/LoaderTests.java
+++ b/src/test/java/gov/usgs/earthquake/nshmp/model/LoaderTests.java
@@ -214,7 +214,7 @@ class LoaderTests {
       List<Site> sites) throws IOException {
 
     ExecutorService exec = initExecutor(config.performance.threadCount);
-    HazardExport handler = HazardExport.create(model, config, sites);
+    HazardExport handler = HazardExport.create(model, config, sites, OptionalDouble.empty());
     for (Site site : sites) {
       Hazard hazard = HazardCalcs.hazard(model, config, site, exec);
       handler.write(hazard);