diff --git a/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregation.java b/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregation.java
index 940515dd773d985c6e794bfdc4097fb765c3639f..cef4d8285de2982d7b5d5fc856771bd3fed4c986 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregation.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregation.java
@@ -342,7 +342,7 @@ public final class Disaggregation {
         double ruptureSetRate = RATE_INTERPOLATER.findY(ruptureSetCurve, config.iml);
         if (Double.isNaN(ruptureSetRate) || ruptureSetRate == 0.0) {
           // Consider logging statement below
-          // System.out.println("Skipping: " + curveSet.ruptureSet.name());
+          System.err.println("Skipping: " + curveSet.ruptures.name());
           continue;
         }
         Map<Gmm, DisaggDataset> ruptureSetDatasets = Disaggregator.disaggregate(
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregator.java b/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregator.java
index 6fa3be477fa6375c8e5c1348379b6acb6ce03e52..e40bf69ae56b050c26e453d3241a163515b34fb3 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregator.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/calc/Disaggregator.java
@@ -209,6 +209,7 @@ final class Disaggregator {
      * are [rate, residual, rScaled, mScaled, εScaled].
      */
     Map<Gmm, double[]> gmmData = createDataMap(gmmKeys);
+    double srcWeight = ruptures.weight();
 
     /* Add rupture data to builders */
     for (int i = 0; i < inputs.size(); i++) {
@@ -233,11 +234,7 @@ final class Disaggregator {
           double ε = Maths.epsilon(μ, σ, iml);
 
           double probAtIml = probModel.exceedance(μ, σ, trunc, imt, iml);
-
-          // TODO need ruptures.weight
-          // double rate = probAtIml * in.rate * sources.weight() * gmmWeight *
-          // branch.weight();
-          double rate = probAtIml * in.rate * 1.0 * gmmWeight * branch.weight();
+          double rate = probAtIml * in.rate * srcWeight * gmmWeight * branch.weight();
 
           double rScaled = rRup * rate;
           double mScaled = Mw * rate;
@@ -314,6 +311,7 @@ final class Disaggregator {
 
     /* Safe covariant cast assuming switch handles variants. */
     SystemRuptureSet systemRuptures = (SystemRuptureSet) ruptures;
+    double srcWeight = ruptures.weight();
 
     Map<Gmm, DisaggDataset.Builder> builders = createBuilders(gmmSet.gmms(), model);
     for (DisaggDataset.Builder builder : builders.values()) {
@@ -411,10 +409,7 @@ final class Disaggregator {
               double ε = Maths.epsilon(μ, σ, iml);
 
               double probAtIml = probModel.exceedance(μ, σ, trunc, imt, iml);
-              // TODO need ruptures.weight
-              // double rate = probAtIml * in.rate * sources.weight() *
-              // gmmWeight * branch.weight();
-              double rate = probAtIml * in.rate * 1.0 * gmmWeight * branch.weight();
+              double rate = probAtIml * in.rate * srcWeight * gmmWeight * branch.weight();
 
               SystemContributor.Builder contributor = contributors.get(gmm);