Repository: ProjectDrawdown/solutions (language: python)

Issue:
Update the VMA representation in scenarios
Change the VMA representation in the scenarios to support reading the directory from a file


Discussion / hints:

Fix patch:
diff --git a/data/energy/Coal_Plant_Efficiency_for_wind_solns.csv b/data/energy/Coal_Plant_Efficiency_for_wind_solns.csv
deleted file mode 100644
index ad05fb356..000000000
--- a/data/energy/Coal_Plant_Efficiency_for_wind_solns.csv
+++ /dev/null
@@ -1,6 +0,0 @@
-"SOURCE ID: Author/Org, Date, Info",Link,World / Drawdown Region,Specific Geographic Location,Source Validation Code,Year / Date,License Code,Raw Data Input,Original Units,Conversion calculation,Common Units,Weight,Assumptions,Exclude Data?
-"IPCC (2014) IPCC WG3 AR5, min  (Table A.III.2)_IPCC. (2014). Climate Change 2014: Mitigation of Climate Change. Contribution of Working Group III to the Fifth Assessment Report of the Intergovernmental Panel on Climate Change [Edenhofer, O., R. Pichs-Madruga, Y. Sokona, E. Farahani, S. Kadner, K. Seyboth, A. Adler, I. Baum, S. Brunner, P. Eickemeier, B. Kriemann, J. Savolainen, S. Schlömer, C. von Stechow, T. Zwickel and J.C. Minx (2014)]. Cambridge University Press, Cambridge, United Kingdom and New York, NY, USA Retrieved from: https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_full.pdf",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World,,,2014,,,%,,%,,,
-"IPCC (2014) IPCC WG3 AR5, median  (Table A.III.2)_IPCC. (2014). Climate Change 2014: Mitigation of Climate Change. Contribution of Working Group III to the Fifth Assessment Report of the Intergovernmental Panel on Climate Change [Edenhofer, O., R. Pichs-Madruga, Y. Sokona, E. Farahani, S. Kadner, K. Seyboth, A. Adler, I. Baum, S. Brunner, P. Eickemeier, B. Kriemann, J. Savolainen, S. Schlömer, C. von Stechow, T. Zwickel and J.C. Minx (2014)]. Cambridge University Press, Cambridge, United Kingdom and New York, NY, USA Retrieved from: https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_full.pdf",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World,,,2014,,,%,,%,,,True
-"IPCC (2014) IPCC WG3 AR5, max  (Table A.III.2)_IPCC. (2014). Climate Change 2014: Mitigation of Climate Change. Contribution of Working Group III to the Fifth Assessment Report of the Intergovernmental Panel on Climate Change [Edenhofer, O., R. Pichs-Madruga, Y. Sokona, E. Farahani, S. Kadner, K. Seyboth, A. Adler, I. Baum, S. Brunner, P. Eickemeier, B. Kriemann, J. Savolainen, S. Schlömer, C. von Stechow, T. Zwickel and J.C. Minx (2014)]. Cambridge University Press, Cambridge, United Kingdom and New York, NY, USA Retrieved from: https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_full.pdf",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World,,,2014,,,%,,%,,,
-"IEA (2010) Power Generation from Coal (p. 61), lower heating value (LHV)",https://www.iea.org/ciab/papers/power_generation_from_coal.pdf,World,,,2010,,,%,,%,,,
-US EIA (2015) Average 2004-2014,http://www.eia.gov/electricity/annual/html/epa_08_01.html,USA,,,2015,,,BTU/kWh,7.0,%,,,
diff --git a/data/energy/vma_2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit_2.csv b/data/energy/vma_2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit_2.csv
deleted file mode 100644
index 0ab40e8d3..000000000
--- a/data/energy/vma_2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit_2.csv
+++ /dev/null
@@ -1,4 +0,0 @@
-"SOURCE ID: Author/Org, Date, Info",Link,World / Drawdown Region,Specific Geographic Location,Source Validation Code,Year / Date,License Code,Raw Data Input,Original Units,Conversion calculation,Common Units,Weight,Assumptions,Exclude Data?
-PD Common Fuel Data-COAL,,World,,,2016,,81.45043041666668,US$2014/short ton,0.04235422381666667,$US2014/kWh,0.3869914976735052,see explanation for weighting methodology,
-PD Common Fuel Data-NG,,World,,,2016,,9.857588996410025,US$2014/millionBTU,0.03363548983668032,$US2014/kWh,0.2187748175594088,see explanation for weighting methodology,
-"PD Common Fuel Data-Coal/Oil/Gas, based on IEA (2016), Third Quarter",,World,,,2016,,0.03006877734158825,US$2014/kWh,,$US2014/kWh,0.6531313071553646,see explanation for weighting methodology,
diff --git a/data/energy/vma_CONVENTIONAL_First_Cost_per_Implementation_Unit.csv b/data/energy/vma_CONVENTIONAL_First_Cost_per_Implementation_Unit.csv
deleted file mode 100644
index 78df2bfad..000000000
--- a/data/energy/vma_CONVENTIONAL_First_Cost_per_Implementation_Unit.csv
+++ /dev/null
@@ -1,23 +0,0 @@
-"SOURCE ID: Author/Org, Date, Info",Link,World / Drawdown Region,Specific Geographic Location,Source Validation Code,Year / Date,License Code,Raw Data Input,Original Units,Conversion calculation,Common Units,Weight,Assumptions,Exclude Data?
-"IPCC WG3 AR5, Coal - PC, min   (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World ,,1  - Peer Reviewed,2014,,380.0,US$2010/kW,414.20000000000005,US$2014/kW,0.3869914976735052,see explanation for weighting methodology,
-"IPCC WG3 AR5, Coal - PC, max  (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World ,,1  - Peer Reviewed,2014,,3900.0,US$2010/kW,4251.0,US$2014/kW,0.3869914976735052,see explanation for weighting methodology,
-"IPCC WG3 AR5, Natural Gas - CCGT, min  (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World ,,1  - Peer Reviewed,2014,,550.0,US$2010/kW,599.5,US$2014/kW,0.2187748175594088,see explanation for weighting methodology,
-"IPCC WG3 AR5, Natural Gas - CCGT, max  (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World ,,1  - Peer Reviewed,2014,,2100.0,US$2010/kW,2289.0,US$2014/kW,0.2187748175594088,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, coal, low estimate",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,3000.0,US$2016/kW,2960.6556556973846,US$2014/kW,0.3869914976735052,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, natural gas (Combined Cycle), low estimate",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,1000.0,US$2016/kW,986.8852185657948,US$2014/kW,0.2187748175594088,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, natural gas (Combined Cycle), high estimate",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,1300.0,US$2016/kW,1282.9507841355332,US$2014/kW,0.2187748175594088,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, Diesel Reciprocrating Engine Low Estimtae",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,500.0,US$2016/kW,493.4426092828974,US$2014/kW,0.04736499192245056,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, Diesel Reciprocrating Engine High estimate",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,800.0,US$2016/kW,789.5081748526359,US$2014/kW,0.04736499192245056,see explanation for weighting methodology,
-IEA (2010) Projected Costs of generating Electricity (oil plants),http://www.worldenergyoutlook.org/media/weowebsite/energymodel/ProjectedCostsofGeneratingElectricity2010.pdf,Middle East and Africa,South Africa,2 - Public Sector/ Multilateral Agency,2010,,461.0,US$2010/kW,502.49,US$2014/kW,0.04736499192245056,see explanation for weighting methodology,
-"Schmidt T. S., R. Born, and M. Schneider (2012). Assessing the costs of photovoltaic and wind power in six developing countries. Nature Climate Change 2, 548 – 553.  doi:  10.1038 / nclimate1490. - natural gas combined cycle",http://www.nature.com/nclimate/journal/v2/n7/full/nclimate1490.html?foxtrotcallback=true,World,,1  - Peer Reviewed,2012,,700000.0,€2012/MW,926.9875370000001,US$2014/kW,0.2187748175594088,"see explanation for weighting methodology. Conversion rate used €/$ - 1,285697",
-"Schmidt T. S., R. Born, and M. Schneider (2012). Assessing the costs of photovoltaic and wind power in six developing countries. Nature Climate Change 2, 548 – 553.  doi:  10.1038 / nclimate1490. - sub critical hard coal",http://www.nature.com/nclimate/journal/v2/n7/full/nclimate1490.html?foxtrotcallback=true,World,,1  - Peer Reviewed,2012,,1400000.0,€2012/MW,1853.9750740000002,US$2014/kW,0.3869914976735052,"see explanation for weighting methodology. Conversion rate used €/$ - 1,285697",
-"Schmidt T. S., R. Born, and M. Schneider (2012). Assessing the costs of photovoltaic and wind power in six developing countries.Nature Climate Change 2, 548 – 553.  doi:  10.1038 / nclimate1490. - light fuel oil based generation",http://www.nature.com/nclimate/journal/v2/n7/full/nclimate1490.html?foxtrotcallback=true,World,,1  - Peer Reviewed,2012,,700000.0,€2012/MW,926.9875370000001,US$2014/kW,0.04736499192245056,"see explanation for weighting methodology. Conversion rate used €/$ - 1,285697",
-"Schmidt T. S., R. Born, and M. Schneider (2012). Assessing the costs of photovoltaic and wind power in six developing countries. Nature Climate Change 2, 548 – 553.  doi:  10.1038 / nclimate1490. - heavy fuel oil based generation",http://www.nature.com/nclimate/journal/v2/n7/full/nclimate1490.html?foxtrotcallback=true,World,,1  - Peer Reviewed,2012,,750000.0,€2012/MW,993.2009325,US$2014/kW,0.04736499192245056,"see explanation for weighting methodology. Conversion rate used €/$ - 1,285697",
-OECD/NEA 2015 -  Combined Cycle natural gas (Minimum),https://www.oecd-nea.org/ndd/pubs/2015/7057-proj-costs-electricity-2015.pdf,World ,,2 - Public Sector/ Multilateral Agency,2015,,627.0,US$2015/kW,626.25387,US$2014/kW,0.2187748175594088,see explanation for weighting methodology,
-OECD/NEA 2015 - Combined Cycle natural gas (Maximum),https://www.oecd-nea.org/ndd/pubs/2015/7057-proj-costs-electricity-2015.pdf,World,,2 - Public Sector/ Multilateral Agency,2015,,1289.0,US$2015/kW,1287.46609,US$2014/kW,0.2187748175594088,see explanation for weighting methodology,
-OECD/NEA 2015 - Pulverised Coal fired technology (minimum),https://www.oecd-nea.org/ndd/pubs/2015/7057-proj-costs-electricity-2015.pdf,World,,2 - Public Sector/ Multilateral Agency,2015,,813.0,US$2015/kW,812.03253,US$2014/kW,0.3869914976735052,see explanation for weighting methodology,
-OECD/NEA 2015 - Pulverised Coal fired technology (Maximum),https://www.oecd-nea.org/ndd/pubs/2015/7057-proj-costs-electricity-2015.pdf,World,,2 - Public Sector/ Multilateral Agency,2015,,3067.0,US$2015/kW,3063.35027,US$2014/kW,0.3869914976735052,see explanation for weighting methodology,
-US EIA (2013) Conventional Natural gas Combined Cycle,https://www.eia.gov/outlooks/capitalcost/pdf/updated_capcost.pdf,USA,,2 - Public Sector/ Multilateral Agency,2012,,917.0,US$2012/kW,944.51,US$2014/kW,0.2187748175594088,see explanation for weighting methodology,
-US EIA (2013) Coal Dual Unit IGCC,https://www.eia.gov/outlooks/capitalcost/pdf/updated_capcost.pdf,USA,,2 - Public Sector/ Multilateral Agency,2012,,4440.0,US$2012/kW,4573.2,US$2014/kW,0.3869914976735052,see explanation for weighting methodology,
-EnergyNet.DK - advanced pulverized coal fired powerplant,https://energiatalgud.ee/img_auth.php/4/42/Energinet.dk._Technology_Data_for_Energy_Plants._2012.pdf,EU,Denmark,2 - Public Sector/ Multilateral Agency,2012,,2040.0,€2011/kW,2983.178394,US$2014/kW,0.3869914976735052,"see explanation for weighting methodology. Conversion rate used €/$ - 1,392705",
-EnergyNet.DK - gas turbine combined cycle (back pressure),https://energiatalgud.ee/img_auth.php/4/42/Energinet.dk._Technology_Data_for_Energy_Plants._2012.pdf,EU,Denmark,2 - Public Sector/ Multilateral Agency,2012,,1350.0,€2011/kW,1974.1593375000002,US$2014/kW,0.2187748175594088,"see explanation for weighting methodology. Conversion rate used €/$ - 1,392705",
diff --git a/data/energy/vma_CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit_2.csv b/data/energy/vma_CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit_2.csv
deleted file mode 100644
index 5cead0508..000000000
--- a/data/energy/vma_CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit_2.csv
+++ /dev/null
@@ -1,22 +0,0 @@
-"SOURCE ID: Author/Org, Date, Info",Link,World / Drawdown Region,Specific Geographic Location,Source Validation Code,Year / Date,License Code,Raw Data Input,Original Units,Conversion calculation,Common Units,Weight,Assumptions,Exclude Data?
-"IPCC WG3 AR5,  Coal - PC, min   (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World,,1  - Peer Reviewed,2014,,0.0,US$2010/MWh,0.0,US$2014/kWh,0.3869914976735052,see explanation for weighting methodology,
-"IPCC WG3 AR5, Coal - PC, max  (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World,,1  - Peer Reviewed,2014,,9.0,US$2010/MWh,0.009810000000000001,US$2014/kWh,0.3869914976735052,see explanation for weighting methodology,
-"IPCC WG3 AR5, Natural Gas - CCGT, min  (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World,,1  - Peer Reviewed,2014,,0.0,US$2010/MWh,0.0,US$2014/kWh,0.2187748175594088,see explanation for weighting methodology,
-"IPCC WG3 AR5, Natural Gas - CCGT, max  (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World,,1  - Peer Reviewed,2014,,4.9,US$2010/MWh,0.005341000000000001,US$2014/kWh,0.2187748175594088,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, coal (Minimum)",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,2.0,US$2016/MWh,0.0019737704371315897,US$2014/kWh,0.3869914976735052,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, natural gas (Combined Cycle), minimum",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,2.0,US$2016/MWh,0.0019737704371315897,US$2014/kWh,0.2187748175594088,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, natural gas (Combined Cycle), maximum",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,3.5,US$2016/MWh,0.0034540982649802817,US$2014/kWh,0.2187748175594088,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, diesel reciprocating engine",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,15.0,US$2016/MWh,0.014803278278486922,US$2014/kWh,0.04736499192245056,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, natural gas (gas peaking), minimum",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,4.5,US$2016/MWh,0.004440983483546077,US$2014/kWh,0.2187748175594088,see explanation for weighting methodology,
-"Lazard's LCOE Analysis–Version 10.0, 2016, natural gas (gas peaking), maximum",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,7.5,US$2016/MWh,0.007401639139243461,US$2014/kWh,0.2187748175594088,see explanation for weighting methodology,
-Black and Veatch 2012 - Natural gas Combined Cycle Technology,https://www.bv.com/docs/reports-studies/nrel-cost-report.pdf,,,2 - Public Sector/ Multilateral Agency,2012,,3.67,US$2012/MWh,0.0037801,US$2014/kWh,0.2187748175594088,see explanation for weighting methodology,
-Black and Veatch 2012 - Pulverized Coal Fired Power Generation,https://www.bv.com/docs/reports-studies/nrel-cost-report.pdf,,,2 - Public Sector/ Multilateral Agency,2012,,3.71,US$2012/MWh,0.0038213,US$2014/kWh,0.3869914976735052,see explanation for weighting methodology,
-EnergyNet.DK- advanced pulverized coal fired powerplant,https://energiatalgud.ee/img_auth.php/4/42/Energinet.dk._Technology_Data_for_Energy_Plants._2012.pdf,EU,Denmark,2 - Public Sector/ Multilateral Agency,2012,,7.0,€2011/MWh,0.010249428,US$2014/kWh,0.3869914976735052,"see explanation for weighting methodology. Conversion rate used €/$ - 1,392705",
-EnergyNet.DK - gas turbine combined cycle (back pressure),https://energiatalgud.ee/img_auth.php/4/42/Energinet.dk._Technology_Data_for_Energy_Plants._2012.pdf,EU,Denmark,2 - Public Sector/ Multilateral Agency,2012,,2.5,€2011/MWh,0.00366051,US$2014/kWh,0.2187748175594088,"see explanation for weighting methodology. Conversion rate used €/$ - 1,392705",
-EnergyNet.DK - Gas turbine single cycle large scale ,https://energiatalgud.ee/img_auth.php/4/42/Energinet.dk._Technology_Data_for_Energy_Plants._2012.pdf,EU,Denmark,2 - Public Sector/ Multilateral Agency,2012,,4.0,€2011/MWh,0.005856816000000001,US$2014/kWh,0.2187748175594088,"see explanation for weighting methodology. Conversion rate used €/$ - 1,392705",
-EnergyNet.DK - gas turbine single cycle medium scale,https://energiatalgud.ee/img_auth.php/4/42/Energinet.dk._Technology_Data_for_Energy_Plants._2012.pdf,EU,Denmark,2 - Public Sector/ Multilateral Agency,2012,,7.0,€2011/MWh,0.010249428,US$2014/kWh,0.2187748175594088,"see explanation for weighting methodology. Conversion rate used €/$ - 1,392705",
-US EIA (2013) Conventional Natural gas Combined Cycle ,https://www.eia.gov/outlooks/capitalcost/pdf/updated_capcost.pdf ,USA,,2 - Public Sector/ Multilateral Agency,2013,,3.6,US$2012/MWh,0.0037080000000000004,US$2014/kWh,0.2187748175594088,see explanation for weighting methodology,
-US EIA (2013) Coal Single Unit Advanced PC,https://www.eia.gov/outlooks/capitalcost/pdf/updated_capcost.pdf ,USA,,2 - Public Sector/ Multilateral Agency,2013,,4.47,US$2012/MWh,0.0046041,US$2014/kWh,0.3869914976735052,see explanation for weighting methodology,
-US EIA (2013) Advanced Natural gas Combined Cycle ,https://www.eia.gov/outlooks/capitalcost/pdf/updated_capcost.pdf ,USA,,2 - Public Sector/ Multilateral Agency,2013,,3.27,US$2012/MWh,0.0033681,US$2014/kWh,0.2187748175594088,see explanation for weighting methodology,
-JRC ETRI (2014) Pulverised Coal Supercritical,http://publications.jrc.ec.europa.eu/repository/handle/JRC92496,EU,,2 - Public Sector/ Multilateral Agency,2014,,3.6,€2013/MWh,0.0048781198080000004,US$2014/kWh,0.3869914976735052,"see explanation for weighting methodology. Conversion rate used €/$ - 1,328464",
-JRC ETRI (2014) Combined Cycle Gas Turbine Advanced,http://publications.jrc.ec.europa.eu/repository/handle/JRC92496,EU,,2 - Public Sector/ Multilateral Agency,2014,,2.0,€2013/MWh,0.0027100665600000005,US$2014/kWh,0.2187748175594088,"see explanation for weighting methodology. Conversion rate used €/$ - 1,328464",
diff --git a/data/energy/vma_data/CONVENTIONAL_First_Cost_per_Implementation_Unit.csv b/data/energy/vma_data/CONVENTIONAL_First_Cost_per_Implementation_Unit.csv
new file mode 100644
index 000000000..1282d4125
--- /dev/null
+++ b/data/energy/vma_data/CONVENTIONAL_First_Cost_per_Implementation_Unit.csv
@@ -0,0 +1,26 @@
+"SOURCE ID: Author/Org, Date, Info",Link,World / Drawdown Region,Specific Geographic Location,Source Validation Code,Year / Date,License Code,Raw Data Input,Original Units,Conversion calculation,Common Units,Weight,Assumptions,Exclude Data?
+"IPCC (2014) WG3 AR5, Coal - PC, min   (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World ,,1  - Peer Reviewed,2014,,380.0,US$2010/kW,414.20000000000005,US$2014/kW,0.3927651909991376,see explanation for weighting methodology,
+"IPCC (2014) WG3 AR5, Coal - PC, max  (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World ,,1  - Peer Reviewed,2014,,3900.0,US$2010/kW,4251.0,US$2014/kW,0.3927651909991376,see explanation for weighting methodology,
+"IPCC (2014) WG3 AR5, Natural Gas - CCGT, min  (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World ,,1  - Peer Reviewed,2014,,550.0,US$2010/kW,599.5,US$2014/kW,0.22722085296507805,see explanation for weighting methodology,
+"IPCC (2014) WG3 AR5, Natural Gas - CCGT, max  (Table A.III.1)",https://www.ipcc.ch/pdf/assessment-report/ar5/wg3/ipcc_wg3_ar5_annex-iii.pdf,World ,,1  - Peer Reviewed,2014,,2100.0,US$2010/kW,2289.0,US$2014/kW,0.22722085296507805,see explanation for weighting methodology,
+"Lazard (2018) Lazard's LCOE Analysis–Version 12.0, 2018, coal, low estimate",https://www.lazard.com/media/450784/lazards-levelized-cost-of-energy-version-120-vfinal.pdf,USA,,3 - For Profit,2018,,3000.0,US$2017/kW,2897.3890339425584,US$2014/kW,0.3927651909991376,see explanation for weighting methodology,
+"Lazard (2018) Lazard's LCOE Analysis–Version 12.0, 2018, coal, high estimate",https://www.lazard.com/media/450784/lazards-levelized-cost-of-energy-version-120-vfinal.pdf,USA,,3 - For Profit,2018,,8400.0,US$2017/kW,8112.689295039164,US$2014/kW,0.3927651909991376,see explanation for weighting methodology. Includes CCS.,1.0
+"Lazard (2018) Lazard's LCOE Analysis–Version 12.0, 2018, natural gas (Gas Combined Cycle), low estimate",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2018,,700.0,US$2017/kW,676.0574412532636,US$2014/kW,0.22722085296507805,see explanation for weighting methodology,
+"Lazard (2018) Lazard's LCOE Analysis–Version 12.0, 2018, natural gas (Combined Cycle), high estimate",https://www.lazard.com/media/450784/lazards-levelized-cost-of-energy-version-120-vfinal.pdf,USA,,3 - For Profit,2018,,1300.0,US$2017/kW,1255.5352480417753,US$2014/kW,0.22722085296507805,see explanation for weighting methodology,
+"Lazard (2018) Lazard's LCOE Analysis–Version 12.0, 2018, natural gas (peaker), low estimate",https://www.lazard.com/media/450784/lazards-levelized-cost-of-energy-version-120-vfinal.pdf,USA,,3 - For Profit,2018,,700.0,US$2017/kW,676.0574412532636,US$2014/kW,0.22722085296507805,see explanation for weighting methodology,
+"Lazard (2018) Lazard's LCOE Analysis–Version 12.0, 2018, natural gas (peaker), high estimate",https://www.lazard.com/media/450784/lazards-levelized-cost-of-energy-version-120-vfinal.pdf,USA,,3 - For Profit,2018,,950.0,US$2017/kW,917.5065274151435,US$2014/kW,0.22722085296507805,see explanation for weighting methodology,
+"Lazard (2016) Lazard's LCOE Analysis–Version 10.0, 2016, Diesel Reciprocrating Engine Low Estimtae",https://www.lazard.com/perspective/levelized-cost-of-energy-analysis-100/,USA,,3 - For Profit,2016,,500.0,US$2016/kW,493.4426092828974,US$2014/kW,0.034133616091552056,see explanation for weighting methodology,
+"Lazard (2016) Lazard's LCOE Analysis–Version 10.0, 2016, Diesel Reciprocrating Engine High estimate",https://www.lazard.com/media/450784/lazards-levelized-cost-of-energy-version-120-vfinal.pdf,USA,,3 - For Profit,2016,,800.0,US$2016/kW,789.5081748526359,US$2014/kW,0.034133616091552056,see explanation for weighting methodology,
+IEA (2010) Projected Costs of generating Electricity (oil plants),http://www.worldenergyoutlook.org/media/weowebsite/energymodel/ProjectedCostsofGeneratingElectricity2010.pdf,Middle East and Africa,South Africa,2 - Public Sector/ Multilateral Agency,2010,,461.0,US$2010/kW,502.49,US$2014/kW,0.034133616091552056,see explanation for weighting methodology,
+"Schmidt T. S., R. Born, and M. Schneider (2012). Assessing the costs of photovoltaic and wind power in six developing countries. Nature Climate Change 2, 548 – 553.  doi:  10.1038 / nclimate1490. - natural gas combined cycle",http://www.nature.com/nclimate/journal/v2/n7/full/nclimate1490.html?foxtrotcallback=true,World,,1  - Peer Reviewed,2012,,700000.0,€2012/MW,926.9875370000001,US$2014/kW,0.22722085296507805,"see explanation for weighting methodology. Conversion rate used €/$ - 1,285697",
+"Schmidt T. S., R. Born, and M. Schneider (2012). Assessing the costs of photovoltaic and wind power in six developing countries. Nature Climate Change 2, 548 – 553.  doi:  10.1038 / nclimate1490. - sub critical hard coal",http://www.nature.com/nclimate/journal/v2/n7/full/nclimate1490.html?foxtrotcallback=true,World,,1  - Peer Reviewed,2012,,1400000.0,€2012/MW,1853.9750740000002,US$2014/kW,0.3927651909991376,"see explanation for weighting methodology. Conversion rate used €/$ - 1,285697",
+"Schmidt T. S., R. Born, and M. Schneider (2012). Assessing the costs of photovoltaic and wind power in six developing countries.Nature Climate Change 2, 548 – 553.  doi:  10.1038 / nclimate1490. - light fuel oil based generation",http://www.nature.com/nclimate/journal/v2/n7/full/nclimate1490.html?foxtrotcallback=true,World,,1  - Peer Reviewed,2012,,700000.0,€2012/MW,926.9875370000001,US$2014/kW,0.034133616091552056,"see explanation for weighting methodology. Conversion rate used €/$ - 1,285697",
+"Schmidt T. S., R. Born, and M. Schneider (2012). Assessing the costs of photovoltaic and wind power in six developing countries. Nature Climate Change 2, 548 – 553.  doi:  10.1038 / nclimate1490. - heavy fuel oil based generation",http://www.nature.com/nclimate/journal/v2/n7/full/nclimate1490.html?foxtrotcallback=true,World,,1  - Peer Reviewed,2012,,750000.0,€2012/MW,993.2009325,US$2014/kW,0.034133616091552056,"see explanation for weighting methodology. Conversion rate used €/$ - 1,285697",
+IEA and NEA (2015) -  Combined Cycle natural gas (Minimum)_IEA and NEA (2015). Projected Costs of Generating Electricity – edition 2015. Organisation for Economic Co-operation and Development - International Energy Agency and Nuclear Energy Agency. France. ,https://www.oecd-nea.org/ndd/pubs/2015/7057-proj-costs-electricity-2015.pdf,World ,,2 - Public Sector/ Multilateral Agency,2015,,627.0,US$2015/kW,626.25387,US$2014/kW,0.22722085296507805,see explanation for weighting methodology,
+IEA and NEA (2015) - Combined Cycle natural gas (Maximum)_IEA and NEA (2015). Projected Costs of Generating Electricity – edition 2015. Organisation for Economic Co-operation and Development - International Energy Agency and Nuclear Energy Agency. France. ,https://www.oecd-nea.org/ndd/pubs/2015/7057-proj-costs-electricity-2015.pdf,World,,2 - Public Sector/ Multilateral Agency,2015,,1289.0,US$2015/kW,1287.46609,US$2014/kW,0.22722085296507805,see explanation for weighting methodology,
+IEA and NEA (2015) - Pulverised Coal fired technology (minimum)_IEA and NEA (2015). Projected Costs of Generating Electricity – edition 2015. Organisation for Economic Co-operation and Development - International Energy Agency and Nuclear Energy Agency. France. ,https://www.oecd-nea.org/ndd/pubs/2015/7057-proj-costs-electricity-2015.pdf,World,,2 - Public Sector/ Multilateral Agency,2015,,813.0,US$2015/kW,812.03253,US$2014/kW,0.3927651909991376,see explanation for weighting methodology,
+IEA and NEA (2015) - Pulverised Coal fired technology (Maximum)_IEA and NEA (2015). Projected Costs of Generating Electricity – edition 2015. Organisation for Economic Co-operation and Development - International Energy Agency and Nuclear Energy Agency. France. ,https://www.oecd-nea.org/ndd/pubs/2015/7057-proj-costs-electricity-2015.pdf,World,,2 - Public Sector/ Multilateral Agency,2015,,3067.0,US$2015/kW,3063.35027,US$2014/kW,0.3927651909991376,see explanation for weighting methodology,
+US EIA (2013) Conventional Natural gas Combined Cycle,https://www.eia.gov/outlooks/capitalcost/pdf/updated_capcost.pdf,USA,,2 - Public Sector/ Multilateral Agency,2012,,917.0,US$2012/kW,944.51,US$2014/kW,0.22722085296507805,see explanation for weighting methodology,
+US EIA (2013) Coal Dual Unit IGCC,https://www.eia.gov/outlooks/capitalcost/pdf/updated_capcost.pdf,USA,,2 - Public Sector/ Multilateral Agency,2012,,4440.0,US$2012/kW,4573.2,US$2014/kW,0.3927651909991376,see explanation for weighting methodology,
+"EnergyNet (2012) - advanced pulverized coal fired powerplant_Danish Energy Agency and Energynet. (2012). Technology Data for Energy Plants Generation of Electricity and District Heating, Energy Storage and Energy Carrier Generation and Conversion. Danish Energy Agency and Energinet.dk",https://energiatalgud.ee/img_auth.php/4/42/Energinet.dk._Technology_Data_for_Energy_Plants._2012.pdf,EU,Denmark,2 - Public Sector/ Multilateral Agency,2012,,2040.0,€2011/kW,2983.178394,US$2014/kW,0.3927651909991376,"see explanation for weighting methodology. Conversion rate used €/$ - 1,392705",
+"EnergyNet (2012) - advanced pulverized coal fired powerplant_Danish Energy Agency and Energynet. (2012). Technology Data for Energy Plants Generation of Electricity and District Heating, Energy Storage and Energy Carrier Generation and Conversion. Danish Energy Agency and Energinet.dk",https://energiatalgud.ee/img_auth.php/4/42/Energinet.dk._Technology_Data_for_Energy_Plants._2012.pdf,EU,Denmark,2 - Public Sector/ Multilateral Agency,2012,,1350.0,€2011/kW,1974.1593375000002,US$2014/kW,0.22722085296507805,"see explanation for weighting methodology. Conversion rate used €/$ - 1,392705",
diff --git a/data/energy/vma_Coal_Plant_Efficiency_2.csv b/data/energy/vma_data/Coal_Plant_Efficiency.csv
similarity index 100%
rename from data/energy/vma_Coal_Plant_Efficiency_2.csv
rename to data/energy/vma_data/Coal_Plant_Efficiency.csv
diff --git a/data/energy/vma_Kerosene_Heating_Oil_Spot_Price.csv b/data/energy/vma_data/Kerosene_Heating_Oil_Spot_Price.csv
similarity index 100%
rename from data/energy/vma_Kerosene_Heating_Oil_Spot_Price.csv
rename to data/energy/vma_data/Kerosene_Heating_Oil_Spot_Price.csv
diff --git a/data/energy/vma_Oil_Plant_Efficiency_2.csv b/data/energy/vma_data/Oil_Plant_Efficiency.csv
similarity index 100%
rename from data/energy/vma_Oil_Plant_Efficiency_2.csv
rename to data/energy/vma_data/Oil_Plant_Efficiency.csv
diff --git a/data/energy/vma_data/vma_sources.json b/data/energy/vma_data/vma_sources.json
new file mode 100644
index 000000000..fd4ba3ff9
--- /dev/null
+++ b/data/energy/vma_data/vma_sources.json
@@ -0,0 +1,73 @@
+{
+  "2005-2014 Average CONVENTIONAL Fuel Price per functional unit": {
+    "title": "2005-2014 Average CONVENTIONAL Fuel Price per functional unit",
+    "filename": "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv",
+    "use_weight": true,
+    "units": "$US2014/kWh"
+  },
+  "Coal Plant Efficiency": {
+    "title": "Coal Plant Efficiency",
+    "filename": "Coal_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh/TW/year"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "CONVENTIONAL Fixed Operating Cost (FOM)": {
+    "title": "CONVENTIONAL Fixed Operating Cost (FOM)",
+    "filename": "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "use_weight": true,
+    "units": "TWh/TW"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kWh"
+  },
+  "Discount Rate: Commercial / Industry": {
+    "title": "Discount Rate: Commercial / Industry",
+    "filename": "Discount_Rate_Commercial_Industry.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Kerosene (Heating Oil) Spot Price": {
+    "title": "Kerosene (Heating Oil) Spot Price",
+    "filename": "Kerosene_Heating_Oil_Spot_Price.csv",
+    "stat_correction": true
+  },
+  "Natural Gas Plant Efficiency": {
+    "title": "Natural Gas Plant Efficiency",
+    "filename": "Natural_Gas_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Oil Plant Efficiency": {
+    "title": "Oil Plant Efficiency",
+    "filename": "Oil_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Weighted Average CONVENTIONAL Plant Efficiency": {
+    "title": "Weighted Average CONVENTIONAL Plant Efficiency",
+    "filename": "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv",
+    "use_weight": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/model/advanced_controls.py b/model/advanced_controls.py
index d9980e6e9..e2223d41c 100644
--- a/model/advanced_controls.py
+++ b/model/advanced_controls.py
@@ -9,8 +9,10 @@
 import json
 import typing
 import re
+import warnings
 from pathlib import Path
 from datetime import datetime
+import numpy as np
 import pandas as pd
 import pytest
 from model import emissionsfactors as ef
@@ -1000,8 +1002,13 @@ def _substitute_vma(self, val, vma_titles, name):
             if v and not pd.isna(v.avg_high_low(key='mean')):
                 break
         else:
-            raise KeyError(f'"{vma_titles}" must be included in vmas to calculate mean/high/low.'
-                    f'vmas included: {self.vmas.keys()}')
+            if len(vma_titles) == 1:
+                needed = repr(vma_titles[0])
+            else:
+                needed = f"one of {', '.join([repr(t) for t in vma_titles])}"
+            warnings.warn(f"Expected non-empty VMA {needed}")
+            return raw_val_from_excel
+
 
         stat = stat.lower()
         self.vma_statistics[name] = longstat or stat
diff --git a/model/vma.py b/model/vma.py
index 26853f933..dd6c35f32 100644
--- a/model/vma.py
+++ b/model/vma.py
@@ -1,27 +1,18 @@
 """Implementation of the Variable Meta-Analysis module."""
 
-import io
 import math
-import pathlib
+from pathlib import Path
 import re
 import numpy as np
 import pandas as pd
-import openpyxl
-
+import json
+import warnings
 import model.dd
-from tools.vma_xls_extract import VMAReader
-
 
 VMA_columns = ['Value', 'Raw', 'Raw Units', 'Weight', 'Exclude?', 'Region', 'Main Region', 'TMR']
 
-# Stuff I'd like to change:
-# (1) Get rid of fixed summaries.  This is just a bad idea!  Never hardwire storage of cached results
-# away from the results they are caching, it is bound to produce errors.
-# (2) Get rid of the to/from xls code.  We don't need it.
-# (3) Switch to a json-directory format, like we did for TAM and adoption
-# (4) Store the "Explanation" metadata into the "Notes" field
-#
-# More fanciful
+
+# Stuff that would be interesting to do:
 # (5) Instead of mean/+sd/-sd, it seems like what we really want is median/80-percentile/20-percentile
 # Then you don't need all this standard deviation and outlier management?   Weighting is still possible.
 # (6) Add all the Excel columns into the python datastructure, and create a decent in-python (in-Jupyter) browsing/editing
@@ -31,40 +22,6 @@
 # (9) Enable caching of computed conversions and summaries (with save)
 
 
-
-def populate_fixed_summaries(vma_dict, filename):
-    """
-    Convenience function for use by solution classes.
-    Args:
-        vma_dict: dict indexed by VMA Title
-        filename: VMA_info CSV file with fixed summary data for Mean, High, Low
-    Modifies the given vma_dict according to the title in the 'Title on xls'
-    row of the 'filename' CSV, populating the vma.fixed_summary field.
-    """
-    vma_info_df = pd.read_csv(filename, index_col=0)
-    for _, row in vma_info_df.iterrows():
-        title = row['Title on xls']
-        fixed_mean = row.get('Fixed Mean', np.nan)
-        fixed_high = row.get('Fixed High', np.nan)
-        fixed_low = row.get('Fixed Low', np.nan)
-        fixed_summary = check_fixed_summary(fixed_mean, fixed_high, fixed_low)
-        if fixed_summary is not None:
-            vma_dict[title].fixed_summary = fixed_summary
-
-
-def check_fixed_summary(*values):
-    """Checks that there are no NaN/None values in the given summary.
-    Arguments:
-        values: individually given values, e.g. check_fixed(1, 2, None)
-    Returns:
-        None if any value is NaN/None, otherwise a tuple of the given iterable
-    """
-    if any([pd.isna(value) for value in values]):
-        return None
-    else:
-        return tuple(values)
-
-
 def convert_percentages(val):
     """pd.apply() functions to convert percentages"""
     if isinstance(val, str) and val.endswith('%'):
@@ -77,7 +34,6 @@ def convert_percentages(val):
     except ValueError:
         return np.inf
 
-
 def convert_NaN(val):
     """pd.apply() functions to convert NaN"""
     if isinstance(val, str) and val.lower() == 'nan':
@@ -108,15 +64,13 @@ class VMA:
 
     def __init__(self, filename, title=None, low_sd=1.0, high_sd=1.0,
                  discard_multiplier=3, stat_correction=None, use_weight=False,
-                 bound_correction=None, fixed_summary=None, 
-                 description=None, notes=None, units=None):
+                 bound_correction=None,
+                 description=None, units=None):
         """Arguments:
          filename: (string, pathlib.Path, or io.StringIO) Can be either
            * Path to a CSV file containing data sources. The CSV file must
              contain columns named "Raw Data Input", "Weight", and "Original
              Units". It can contain additional columns, which will be ignored.
-           * The xlsx/xlsm file needs to have columns structured in a certain
-             way, see VMAReader.df_template for more information.
            * io.StringIO objects are processed as if they are opened CSV files
          title: string, name of the VMA to extract from an Excel file. This
            value is unused if filename is a CSV. Will raise an AssertionError
@@ -129,10 +83,7 @@ def __init__(self, filename, title=None, low_sd=1.0, high_sd=1.0,
          use_weight: if true, use weights provided with the VMA to bias the mean.
          bound_correction: if true, and the low value calculated with standard deviation would be negative, 
          use min instead of sd on on the lower value.
-         fixed_summary: if present, should be a tuple to use for (mean, high, low) instead
-           of calculating those values
          description: optional description of what this VMA describes
-         notes: optional notes that add more details
          units: the units to use for this VMA; retrieved from datafile by default
         """
         self.filename = filename
@@ -143,10 +94,7 @@ def __init__(self, filename, title=None, low_sd=1.0, high_sd=1.0,
         self.stat_correction = stat_correction
         self.use_weight = use_weight
         self.bound_correction = bound_correction
-        # TODO notes exist in the Excel files and should be retrieved.
-        # TODO description does not exist, but it should!
         self.description = description
-        self.notes = notes
         self.units = normalize_units(units)
 
         # COMMENT: this initialization condition below is weird, since it defaults to making stat_correction True
@@ -160,29 +108,22 @@ def __init__(self, filename, title=None, low_sd=1.0, high_sd=1.0,
         # VMA initialization in the existing code to determine if they are using the "trick" to set stat_correction 
         # to True, instead of explicitly setting stat_correction directly.  (Given that I never see stat_correction
         # in initializers, I expect this is happening a lot.)
+        #
+        # Update: the reason this is probably done this way is because the setting for stat_correction isn't on the
+        # VMA page, it is on the AC page where the VMA is used.  Complex to update the code to extract this properly for now.
+        
         if stat_correction is None:
             # Excel does not discard outliers if weights are used, we do the same by default.
             self.stat_correction = not use_weight
         else:
             self.stat_correction = stat_correction
 
-        self.fixed_summary = fixed_summary
         self.df = pd.DataFrame(columns=VMA_columns)
 
         if filename:
-            # Turn strings into pathlib
-            if isinstance(filename, str):
-                filename = pathlib.Path(filename)
-
-            # Instantiate VMA with various file types
-            if isinstance(filename, io.StringIO) or filename.suffix == '.csv':
-                self._read_csv(filename=filename)
-            elif filename.suffix == '.xlsx' or filename.suffix == '.xlsm':
-                self._read_xls(filename=filename, title=title)
-            else:
-                raise ValueError(
-                    f'{filename!r} is not a recognized filetype for vma.VMA'
-                )
+            if isinstance(filename,str):   # don't convert StringIO!
+                filename = Path(filename)
+            self._read_csv(filename=filename)
         else:
             self.source_data = pd.DataFrame()
 
@@ -200,43 +141,7 @@ def _read_csv(self, filename):
                              na_values=['#DIV/0!', '#REF!'])
         self._convert_from_human_readable(csv_df, filename)
 
-    def _read_xls(self, filename, title, sheetname=None, read_fixed_summary=None):
-        """
-        Read a properly formatted xlsx/xlsm file (with a Variable
-        Meta-analysis sheet) to instantiate this VMA.
-
-        Arguments:
-            filename: pathlib.Path to an Excel file
-            title: string matching VMA name in the Variable Meta-analysis sheet
-            sheetname: sheet to read VMA from, if not one of the standard ones
-            read_fixed_summary: whether to include the fixed summaries from the file or not
-
-        Populates self.source_data, self.df, and self.fixed_summary if the
-        required values are present.
-        """
-        workbook = openpyxl.load_workbook(filename=filename,data_only=True,keep_links=False)
-        vma_reader = VMAReader(workbook)
-
-        # Pull the desired table from this workbook
-        try:
-            (xl_df, use_weight, summary) = \
-                vma_reader.xls_df_dict(sheetname=sheetname, title=title, fixed_summary=read_fixed_summary)[title]
-        except KeyError:
-            # The title wasn't available in the given workbook. Read all titles
-            # to give the user a hint.
-            full_dict = vma_reader.xls_df_dict(sheetname=sheetname)
-            raise ValueError(
-                f"Title {title!r} not available in {filename}\nOptions\n\t" + \
-                "\n\t".join(full_dict.keys())
-            )
-
-        self._convert_from_human_readable(xl_df, filename)
-
-        # Populate the self.fixed_summary field if the values are valid
-        fixed_summary = check_fixed_summary(*summary)
-        if fixed_summary is not None:
-            self.fixed_summary = fixed_summary
-
+ 
     def _convert_from_human_readable(self, readable_df, filename):
         """
         Converts a known set of readable column names to a known column set. A
@@ -246,7 +151,7 @@ def _convert_from_human_readable(self, readable_df, filename):
         Arguments:
             readable_df: dataframe (from CSV or Excel file) using the standard
                 long-form column names
-            filename: pathlib.Path to source file, passed through for error
+            filename: Path to source file, passed through for error
                 transparency purposes
 
         Populates self.source_data with readable_df directly. Populates self.df
@@ -339,9 +244,7 @@ def avg_high_low(self, key=None, regime=None, region=None,
             all_weights = self.df['Weight'].fillna(1.0)
             M = (all_weights != 0).sum()
 
-        if self.fixed_summary is not None:
-            (mean, high, low) = self.fixed_summary
-        elif self.df.empty:
+        if self.df.empty:
             mean = high = low = np.nan
         else:
             df = self._discard_outliers(discard_multiplier) if stat_correction else self.df
@@ -392,3 +295,59 @@ def write_to_file(self, new_df):
 
     def reload_from_file(self):
         self._read_csv(filename=self.filename)
+    
+    def essential_parameters(self):
+        """Return a dictionary of "essential" parameters, that is parameters whose value differs from the default"""
+        result = {}
+        result['title'] = self.title
+        if isinstance(self.filename, Path): result['filename'] = str(self.filename)
+        if self.low_sd != 1.0: result['low_sd'] = self.low_sd
+        if self.high_sd != 1.0: result['high_sd'] = self.high_sd
+        if self.discard_multiplier != 3: result['discard_multiplier'] = self.discard_multiplier
+        # Currently skip this since it is *always* calculated indirectly (and probalby sometimes wrongly)
+        # if self.stat_correction: result['stat_correction'] = True
+        if self.use_weight: result['use_weight'] = True
+        if self.bound_correction: result['bound_correction'] = True
+        if self.description is not None and self.description != "": result['description'] = self.description
+        if self.units is not None and self.units != "": result['units'] = self.units
+        return result
+ 
+
+    @classmethod
+    def load_vma_directory(cls, directoryfile):
+        """Load and return an array of VMAs that are defined in a directory json-file"""
+        directoryfile = Path(directoryfile)
+        directorycontent = json.loads(directoryfile.read_text(encoding='utf-8'))
+        result = {}
+        for vmatitle in directorycontent.keys():
+            vmargs = directorycontent[vmatitle]
+            if not vmargs.get('filename',False):
+                warnings.warn(f"Skipping VMA {vmatitle} because no filename found")
+                continue
+            vmargs['filename'] = directoryfile.with_name(vmargs['filename'])
+            vmargs['title']=vmatitle
+            vma = cls(**vmargs)
+            result[vmatitle]=vma
+        return result
+
+    @classmethod
+    def write_vma_directory(cls, vmacollection, directory):
+        """Write out the directory file for this collection of VMAs.  The directory file will only
+        have entries for VMAs that have files _in this directory_.  Global VMAs, if present, will be omitted (and a warning will be issued)."""
+        directory = Path(directory).resolve()
+        directoryinfo = {}
+        for title, vma in vmacollection.items():
+            params = vma.essential_parameters()
+            if 'filename' not in params:
+                continue
+            filename = Path(params['filename'])
+            if filename.parent.resolve() != directory:
+                warnings.warn(f"Skipping VMA {title} that is in {filename.parent.resolve()}")
+                continue
+            params['filename'] = filename.name # remove directory info
+            if not params.get('title',False):
+                params['title'] = title
+            directoryinfo[title] = params
+        directoryfile = Path(directory)/"vma_sources.json"
+        directoryfile.write_text(json.dumps(directoryinfo, indent=2))
+
diff --git a/model/vma2.py b/model/vma2.py
deleted file mode 100644
index 4f265c021..000000000
--- a/model/vma2.py
+++ /dev/null
@@ -1,218 +0,0 @@
-"""Implementation of the Variable Meta-Analysis module."""
-
-import io
-import math
-import pathlib
-
-import numpy as np
-import pandas as pd
-
-import model.dd
-from tools.vma_xls_extract import VMAReader
-
-
-VMA_columns = ['Value', 'Units', 'Raw', 'Weight', 'Exclude?', 'Region', 'Main Region', 'TMR']
-
-
-def check_fixed_summary(*values):
-    """Checks that there are no NaN/None values in the given summary.
-    Arguments:
-        values: individually given values, e.g. check_fixed(1, 2, None)
-    Returns:
-        None if any value is NaN/None, otherwise a tuple of the given iterable
-    """
-    if any([pd.isna(value) for value in values]):
-        return None
-    else:
-        return tuple(values)
-
-
-def convert_percentages(val):
-    """pd.apply() functions to convert percentages"""
-    if isinstance(val, str) and val.endswith('%'):
-        try:
-            return float(val.strip('%')) / 100.0
-        except ValueError:
-            return np.inf
-    try:
-        return float(val)
-    except ValueError:
-        return np.inf
-
-
-def convert_NaN(val):
-    """pd.apply() functions to convert NaN"""
-    if isinstance(val, str) and val.lower() == 'nan':
-        return np.nan
-    if pd.isna(val):
-        return np.nan
-    return val
-
-
-class VMA:
-    """Meta-analysis of multiple data sources to a summary result.
-       Arguments:
-         filename: (string, pathlib.Path, or io.StringIO) Can be either
-           * Path to a CSV file containing data sources. The CSV file must
-             contain columns named "Raw Data Input", "Weight", and "Original
-             Units". It can contain additional columns, which will be ignored.
-           * The xlsx/xlsm file needs to have columns structured in a certain
-             way, see VMAReader.df_template for more information.
-           * io.StringIO objects are processed as if they are opened CSV files
-         title: string, name of the VMA to extract from an Excel file. This
-           value is unused if filename is a CSV. Will raise an AssertionError
-           if the title is not available in the Excel file.
-         low_sd: number of multiples of the stddev to use for the low result.
-         high_sd: number of multiples of the stddev to use for the high result.
-         discard_multiplier: discard outlier values more than this many multiples of the
-           stddev away from the mean.
-         stat_correction: discard outliers more than discard_multiplier stddev away from the mean.
-         fixed_summary: if present, should be a tuple to use for (mean, high, low) instead
-           of calculating those values
-    """
-
-    def __init__(self, vma_data_csv: bytes, title=None, low_sd=1.0, high_sd=1.0,
-                 discard_multiplier=3, stat_correction=None, use_weight=False,
-                 fixed_summary=None):
-        self.vma_data_csv = vma_data_csv
-        self.title = title
-        self.low_sd = low_sd
-        self.high_sd = high_sd
-        self.discard_multiplier = discard_multiplier
-        self.stat_correction = stat_correction
-        self.use_weight = use_weight
-        if stat_correction is None:
-            # Excel does not discard outliers if weights are used, we do the same by default.
-            self.stat_correction = not use_weight
-        else:
-            self.stat_correction = stat_correction
-        self.fixed_summary = fixed_summary
-        self.df = pd.DataFrame(columns=VMA_columns)
-
-        csv_df = pd.read_csv(io.BytesIO(vma_data_csv), index_col=False, skipinitialspace=True, skip_blank_lines=True)
-        self._convert_from_human_readable(csv_df)
-
-    def _convert_from_human_readable(self, readable_df):
-        """
-        Converts a known set of readable column names to a known column set. A
-        few data cleanups are also performed, such as converting percentages
-        and filling NaN values.
-
-        Arguments:
-            readable_df: dataframe (from CSV or Excel file) using the standard
-                long-form column names
-            filename: pathlib.Path to source file, passed through for error
-                transparency purposes
-
-        Populates self.source_data with readable_df directly. Populates self.df
-        with a series of renamed columns, along with a few data cleanup steps.
-        """
-        self._validate_readable_df(readable_df)
-        self.source_data = readable_df
-        if self.use_weight:
-            err = f"'Use weight' selected but no weights to use"
-            assert not all(pd.isnull(readable_df['Weight'])), err
-        self.df['Weight'] = readable_df['Weight'].apply(convert_percentages)
-        self.df['Raw'] = readable_df['Raw Data Input'].apply(convert_percentages)
-        self.df['Units'] = readable_df['Original Units']
-        self.df['Value'] = readable_df['Conversion calculation'].apply(convert_NaN)
-        self.df['Exclude?'] = readable_df['Exclude Data?'].fillna(False)
-        # correct some common typos and capitalization differences from Excel files.
-        normalized_region = (readable_df['World / Drawdown Region']
-                .replace('Middle East & Africa', 'Middle East and Africa')
-                .replace('Asia (sans Japan)', 'Asia (Sans Japan)'))
-        readable_df['World / Drawdown Region'] = normalized_region.astype(model.dd.rgn_cat_dtype)
-        self.df['Region'] = readable_df['World / Drawdown Region']
-        main_region = normalized_region.copy()
-        for k, v in model.dd.COUNTRY_REGION_MAP.items():
-            main_region.replace(k, v, inplace=True)
-        self.df['Main Region'] = main_region
-        if 'Thermal-Moisture Regime' in readable_df.columns:
-            dft = readable_df['Thermal-Moisture Regime'].astype(model.dd.tmr_cat_dtype)
-            readable_df['Thermal-Moisture Regime'] = dft
-            self.df['TMR'] = readable_df['Thermal-Moisture Regime'].fillna('')
-        self.df['Value'].fillna(self.df['Raw'], inplace=True)
-
-    def _validate_readable_df(self, readable_df):
-        if readable_df is None:
-            raise ValueError("Dataframe is that VMA empty?")
-
-    def _discard_outliers(self):
-        """Discard outlier values beyond a multiple of the stddev."""
-        df = self.df
-        mean = df['Value'].astype('float64').mean(skipna=True)
-        sd = df['Value'].std(ddof=0)
-        if pd.isna(mean) or pd.isna(sd):
-            return df
-        valid = df['Value'] <= (mean + (self.discard_multiplier * sd))
-        df = df[valid]
-        valid = df['Value'] >= (mean - (self.discard_multiplier * sd))
-        df = df[valid]
-        return df
-
-    def avg_high_low(self, key=None, regime=None, region=None):
-        """
-        Args:
-          key: (optional) specify 'mean', 'high' or 'low' to get single value
-          regime: string name of the thermal moisture regime to select sources for.
-          region: string name of the world region to select sources for.
-
-        Returns:
-          By default returns (mean, high, low) using low_sd/high_sd.
-          If key is specified will return associated value only
-        """
-        if self.use_weight:
-            # Sum the weights before discarding outliers, to match Excel.
-            # https://docs.google.com/document/d/19sq88J_PXY-y_EnqbSJDl0v9CdJArOdFLatNNUFhjEA/edit#heading=h.qkdzs364y2t2
-            # Once reproducing Excel results is no longer essential, total_weight computation
-            # can be moved down to the second use_weight conditional below. That way the sum
-            # of the weights will only include sources which are being included in the mean.
-            total_weights = self.df['Weight'].fillna(1.0).sum()
-            total_weights = total_weights if total_weights != 0.0 else 1.0
-            all_weights = self.df['Weight'].fillna(1.0)
-            M = (all_weights != 0).sum()
-
-        if self.fixed_summary is not None:
-            (mean, high, low) = self.fixed_summary
-        elif self.df.empty:
-            mean = high = low = np.nan
-        else:
-            df = self._discard_outliers() if self.stat_correction else self.df
-            df = df.loc[df['Exclude?'] == False]
-            if regime:
-                df = df.loc[df['TMR'] == regime]
-            if region in model.dd.SPECIAL_COUNTRIES:
-                df = df.loc[df['Region'] == region]
-            elif region in model.dd.MAIN_REGIONS:
-                # include values for special countries in corresponding main regions' statistics
-                df = df.loc[df['Main Region'] == region]
-
-            if self.use_weight:
-                weights = df['Weight'].fillna(1.0)
-                mean = (df['Value'] * weights).sum(skipna=True) / total_weights
-                if M == 0.0:
-                    sd = 0.0
-                else:
-                    # A weighted standard deviation is not the same as stddev()
-                    numerator = (weights * ((df['Value'] - mean) ** 2)).sum()
-                    # when Excel is deprecated, remove all_weights and use: M = (weights != 0).sum()
-                    denominator = ((M - 1) / M) * total_weights
-                    sd = math.sqrt(numerator / denominator)
-            else:
-                mean = df['Value'].mean(skipna=True)
-                # whole population stddev, ddof=0
-                sd = df['Value'].std(ddof=0)
-
-            high = mean + (self.high_sd * sd)
-            low = mean - (self.low_sd * sd)
-
-        if key is None:
-            return mean, high, low
-        elif key == 'high':
-            return high
-        elif key == 'mean' or key == 'average' or key == 'avg':
-            return mean
-        elif key == 'low':
-            return low
-        else:
-            raise ValueError(f"invalid key: {key}. key must be 'mean', 'high', 'low' or None")
diff --git a/solution/afforestation/__init__.py b/solution/afforestation/__init__.py
index 72a31fa16..0060825eb 100644
--- a/solution/afforestation/__init__.py
+++ b/solution/afforestation/__init__.py
@@ -27,81 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestered_Carbon_NOT_Emitted_after_Cyclical_Harvesting_Clearing.csv"),
-        use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'Rotational length (years)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Rotational_length_years.csv"),
-        use_weight=False),
-    'Carbon content in biomass (%)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Carbon_content_in_biomass.csv"),
-        use_weight=False),
-    'Aboveground Biomass (AGB)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Aboveground_Biomass_AGB.csv"),
-        use_weight=False),
-    'Belowground Biomass (BGB)': vma.VMA(
-        filename=None, use_weight=False),
-    'Soil Organic Carbon (SOC)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Soil_Organic_Carbon_SOC.csv"),
-        use_weight=False),
-    'Weight for financial variable on degraded area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Weight_for_financial_variable_on_degraded_area.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/afforestation/vma_data/vma_sources.json b/solution/afforestation/vma_data/vma_sources.json
new file mode 100644
index 000000000..4f10de76a
--- /dev/null
+++ b/solution/afforestation/vma_data/vma_sources.json
@@ -0,0 +1,86 @@
+{
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha/year"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing": {
+    "title": "Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing",
+    "filename": "Sequestered_Carbon_NOT_Emitted_after_Cyclical_Harvesting_Clearing.csv",
+    "stat_correction": true,
+    "units": "t C/ha"
+  },
+  "Rotational length (years)": {
+    "title": "Rotational length (years)",
+    "filename": "Rotational_length_years.csv",
+    "stat_correction": true,
+    "units": "years"
+  },
+  "Carbon content in biomass (%)": {
+    "title": "Carbon content in biomass (%)",
+    "filename": "Carbon_content_in_biomass.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Aboveground Biomass (AGB)": {
+    "title": "Aboveground Biomass (AGB)",
+    "filename": "Aboveground_Biomass_AGB.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Soil Organic Carbon (SOC)": {
+    "title": "Soil Organic Carbon (SOC)",
+    "filename": "Soil_Organic_Carbon_SOC.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Weight for financial variable on degraded area": {
+    "title": "Weight for financial variable on degraded area",
+    "filename": "Weight_for_financial_variable_on_degraded_area.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/airplanes/__init__.py b/solution/airplanes/__init__.py
index ccef15c17..e1660c94d 100644
--- a/solution/airplanes/__init__.py
+++ b/solution/airplanes/__init__.py
@@ -26,92 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=True),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Seat Capacity - Single Aisle': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Seat_Capacity_Single_Aisle.csv"),
-        use_weight=False),
-    'Average Stage Length Flown of Total Operating Fleet in the world (Distances traveled from takeoff to landing)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Stage_Length_Flown_of_Total_Operating_Fleet_in_the_world_Distances_traveled_from_takeoff_to_landing.csv"),
-        use_weight=False),
-    'Average fleet-wide working hours per day': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_fleet_wide_working_hours_per_day.csv"),
-        use_weight=False),
-    'Average time (hrs) between consecutive flights)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_time_hrs_between_consecutive_flights.csv"),
-        use_weight=False),
-    'Average Cruise Speed - Single Aisle': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Cruise_Speed_Single_Aisle.csv"),
-        use_weight=False),
-    'Solution Load Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Solution_Load_Factor.csv"),
-        use_weight=False),
-    'Discount Rate - Commercial': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Commercial.csv"),
-        use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Seat Capacity - Twin Aisle': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Seat_Capacity_Twin_Aisle.csv"),
-        use_weight=False),
-    'Average Cruise Speed - Twin Aisle': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Cruise_Speed_Twin_Aisle.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Aircraft",
diff --git a/solution/airplanes/vma_data/vma_sources.json b/solution/airplanes/vma_data/vma_sources.json
new file mode 100644
index 000000000..29f0bf422
--- /dev/null
+++ b/solution/airplanes/vma_data/vma_sources.json
@@ -0,0 +1,95 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Billion passenger km"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Aircraft"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Billion passenger km/Aircraft"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Billion passenger km/Aircraft"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "Billion passenger km/Aircraft/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "Billion passenger km/Aircraft/year"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/Billion passenger km"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Average Seat Capacity - Single Aisle": {
+    "title": "Average Seat Capacity - Single Aisle",
+    "filename": "Average_Seat_Capacity_Single_Aisle.csv",
+    "stat_correction": true
+  },
+  "Average Stage Length Flown of Total Operating Fleet in the world (Distances traveled from takeoff to landing)": {
+    "title": "Average Stage Length Flown of Total Operating Fleet in the world (Distances traveled from takeoff to landing)",
+    "filename": "Average_Stage_Length_Flown_of_Total_Operating_Fleet_in_the_world_Distances_traveled_from_takeoff_to_landing.csv",
+    "stat_correction": true
+  },
+  "Average fleet-wide working hours per day": {
+    "title": "Average fleet-wide working hours per day",
+    "filename": "Average_fleet_wide_working_hours_per_day.csv",
+    "stat_correction": true
+  },
+  "Average time (hrs) between consecutive flights)": {
+    "title": "Average time (hrs) between consecutive flights)",
+    "filename": "Average_time_hrs_between_consecutive_flights.csv",
+    "stat_correction": true
+  },
+  "Average Cruise Speed - Single Aisle": {
+    "title": "Average Cruise Speed - Single Aisle",
+    "filename": "Average_Cruise_Speed_Single_Aisle.csv",
+    "stat_correction": true
+  },
+  "Solution Load Factor": {
+    "title": "Solution Load Factor",
+    "filename": "Solution_Load_Factor.csv",
+    "stat_correction": true
+  },
+  "Discount Rate - Commercial": {
+    "title": "Discount Rate - Commercial",
+    "filename": "Discount_Rate_Commercial.csv",
+    "stat_correction": true
+  },
+  "Average Seat Capacity - Twin Aisle": {
+    "title": "Average Seat Capacity - Twin Aisle",
+    "filename": "Average_Seat_Capacity_Twin_Aisle.csv",
+    "stat_correction": true
+  },
+  "Average Cruise Speed - Twin Aisle": {
+    "title": "Average Cruise Speed - Twin Aisle",
+    "filename": "Average_Cruise_Speed_Twin_Aisle.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/altcement/__init__.py b/solution/altcement/__init__.py
index 79826e8d7..5a5832fda 100644
--- a/solution/altcement/__init__.py
+++ b/solution/altcement/__init__.py
@@ -27,89 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Discount Rate - Commercial': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Commercial.csv"),
-        use_weight=False),
-    'Clinker to Cement Ratio in Year 2': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Clinker_to_Cement_Ratio_in_Year_2.csv"),
-        use_weight=True),
-    'Clinker to Cement Ratio of Conventional Technology': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Clinker_to_Cement_Ratio_of_Conventional_Technology.csv"),
-        use_weight=False),
-    'Clinker Ratio Range Selection': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Clinker_Ratio_Range_Selection.csv"),
-        use_weight=False),
-    'Variable 29': vma.VMA(
-        filename=None, use_weight=False),
-    'Percent Adoption of Blended Cements in Year 2 (2050)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Percent_Adoption_of_Blended_Cements_in_Year_2_2050.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "MMt",
diff --git a/solution/altcement/vma_data/vma_sources.json b/solution/altcement/vma_data/vma_sources.json
new file mode 100644
index 000000000..e9c8e149c
--- /dev/null
+++ b/solution/altcement/vma_data/vma_sources.json
@@ -0,0 +1,117 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "MMt Cement"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/MMt Cement"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/MMt Cement"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "MMt Cement/MMt Cement"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "MMt Cement/MMt Cement"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "MMt Cement/MMt Cement/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "MMt Cement/MMt Cement/year"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/MMt Cement"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/MMt Cement"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TJ/MMt Cement"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/MMt Cement"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/MMt Cement"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/MMt Cement"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/MMt Cement"
+  },
+  "Discount Rate - Commercial": {
+    "title": "Discount Rate - Commercial",
+    "filename": "Discount_Rate_Commercial.csv",
+    "stat_correction": true
+  },
+  "Clinker to Cement Ratio in Year 2": {
+    "title": "Clinker to Cement Ratio in Year 2",
+    "filename": "Clinker_to_Cement_Ratio_in_Year_2.csv",
+    "use_weight": true
+  },
+  "Clinker to Cement Ratio of Conventional Technology": {
+    "title": "Clinker to Cement Ratio of Conventional Technology",
+    "filename": "Clinker_to_Cement_Ratio_of_Conventional_Technology.csv",
+    "stat_correction": true
+  },
+  "Clinker Ratio Range Selection": {
+    "title": "Clinker Ratio Range Selection",
+    "filename": "Clinker_Ratio_Range_Selection.csv",
+    "stat_correction": true
+  },
+  "Percent Adoption of Blended Cements in Year 2 (2050)": {
+    "title": "Percent Adoption of Blended Cements in Year 2 (2050)",
+    "filename": "Percent_Adoption_of_Blended_Cements_in_Year_2_2050.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/bamboo/__init__.py b/solution/bamboo/__init__.py
index b8c79528b..dcb9441c9 100644
--- a/solution/bamboo/__init__.py
+++ b/solution/bamboo/__init__.py
@@ -27,73 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestered_Carbon_NOT_Emitted_after_Cyclical_Harvesting_Clearing.csv"),
-        use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'Above-ground biomass (AGB)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Above_ground_biomass_AGB.csv"),
-        use_weight=False),
-    'Below-ground biomass (BGB)': vma.VMA(
-        filename=None, use_weight=False),
-    'Soil organic carbon (SOC)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Soil_organic_carbon_SOC.csv"),
-        use_weight=False),
-    'Weight for financial variable on degraded area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Weight_for_financial_variable_on_degraded_area.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/bamboo/vma_data/vma_sources.json b/solution/bamboo/vma_data/vma_sources.json
new file mode 100644
index 000000000..cbd174653
--- /dev/null
+++ b/solution/bamboo/vma_data/vma_sources.json
@@ -0,0 +1,61 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha/year"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing": {
+    "title": "Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing",
+    "filename": "Sequestered_Carbon_NOT_Emitted_after_Cyclical_Harvesting_Clearing.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Above-ground biomass (AGB)": {
+    "title": "Above-ground biomass (AGB)",
+    "filename": "Above_ground_biomass_AGB.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Soil organic carbon (SOC)": {
+    "title": "Soil organic carbon (SOC)",
+    "filename": "Soil_organic_carbon_SOC.csv",
+    "stat_correction": true
+  },
+  "Weight for financial variable on degraded area": {
+    "title": "Weight for financial variable on degraded area",
+    "filename": "Weight_for_financial_variable_on_degraded_area.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/bikeinfrastructure/__init__.py b/solution/bikeinfrastructure/__init__.py
index 13a2bd652..1367dcc34 100644
--- a/solution/bikeinfrastructure/__init__.py
+++ b/solution/bikeinfrastructure/__init__.py
@@ -26,74 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Annual Use Conversion Calculation': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Annual_Use_Conversion_Calculation.csv"),
-        use_weight=False),
-    'Discount Rate for Public Entities': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_for_Public_Entities.csv"),
-        use_weight=True),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "bike lane km/ car lane km",
diff --git a/solution/bikeinfrastructure/vma_data/vma_sources.json b/solution/bikeinfrastructure/vma_data/vma_sources.json
new file mode 100644
index 000000000..6c5a1d35a
--- /dev/null
+++ b/solution/bikeinfrastructure/vma_data/vma_sources.json
@@ -0,0 +1,78 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/bike lane km/car lane km"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/bike lane km/car lane km"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/bike lane km/car lane km"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/bike lane km/car lane km"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/bike lane km/car lane km/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/bike lane km/car lane km/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/billion passenger-km"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/billion passenger-km"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/billion passenger-km"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/billion passenger-km"
+  },
+  "Average Annual Use Conversion Calculation": {
+    "title": "Average Annual Use Conversion Calculation",
+    "filename": "Average_Annual_Use_Conversion_Calculation.csv",
+    "stat_correction": true
+  },
+  "Discount Rate for Public Entities": {
+    "title": "Discount Rate for Public Entities",
+    "filename": "Discount_Rate_for_Public_Entities.csv",
+    "use_weight": true
+  }
+}
\ No newline at end of file
diff --git a/solution/biochar/__init__.py b/solution/biochar/__init__.py
index b25431b39..d1574f504 100644
--- a/solution/biochar/__init__.py
+++ b/solution/biochar/__init__.py
@@ -26,86 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'Biochar retail price (US$/tons)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Biochar_retail_price_US_tons.csv"),
-        use_weight=False),
-    'Biochar wholesale price (US$/tons)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Biochar_wholesale_price_US_tons.csv"),
-        use_weight=False),
-    'Net Biochar Production per Biochar Facility': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Net_Biochar_Production_per_Biochar_Facility.csv"),
-        use_weight=False),
-    'SOLUTION Net Profit Margin': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin.csv"),
-        use_weight=False),
-    'Biochar potential based on biomass availability by type (crop residues)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Biochar_potential_based_on_biomass_availability_by_type_crop_residues.csv"),
-        use_weight=False),
-    'Biochar potential based on biomass availability by type (biomass crops)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Biochar_potential_based_on_biomass_availability_by_type_biomass_crops.csv"),
-        use_weight=False),
-    'Biochar potential based on biomass availability by type (other residues)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Biochar_potential_based_on_biomass_availability_by_type_other_residues.csv"),
-        use_weight=False),
-    'Carbon content in biomass (%)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Carbon_content_in_biomass.csv"),
-        use_weight=False),
-    'Estimated Fraction of Input Biochar that is output to be Sold': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Estimated_Fraction_of_Input_Biochar_that_is_output_to_be_Sold.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Biochar facility",
diff --git a/solution/biochar/vma_data/vma_sources.json b/solution/biochar/vma_data/vma_sources.json
new file mode 100644
index 000000000..5008de72d
--- /dev/null
+++ b/solution/biochar/vma_data/vma_sources.json
@@ -0,0 +1,90 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "output tonne biochar"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "output tonne biochar/Biochar facility"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "output tonne biochar/Biochar facility/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/output tonne biochar"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq per ton feedstock"
+  },
+  "Biochar retail price (US$/tons)": {
+    "title": "Biochar retail price (US$/tons)",
+    "filename": "Biochar_retail_price_US_tons.csv",
+    "stat_correction": true,
+    "units": "US$2014 per output tonne biochar"
+  },
+  "Biochar wholesale price (US$/tons)": {
+    "title": "Biochar wholesale price (US$/tons)",
+    "filename": "Biochar_wholesale_price_US_tons.csv",
+    "stat_correction": true,
+    "units": "US$2014 per output tonne biochar"
+  },
+  "Net Biochar Production per Biochar Facility": {
+    "title": "Net Biochar Production per Biochar Facility",
+    "filename": "Net_Biochar_Production_per_Biochar_Facility.csv",
+    "stat_correction": true,
+    "units": "produced tons biochar/biochar facility"
+  },
+  "SOLUTION Net Profit Margin": {
+    "title": "SOLUTION Net Profit Margin",
+    "filename": "SOLUTION_Net_Profit_Margin.csv",
+    "stat_correction": true,
+    "units": "US$2014 per output tonne biochar"
+  },
+  "Biochar potential based on biomass availability by type (crop residues)": {
+    "title": "Biochar potential based on biomass availability by type (crop residues)",
+    "filename": "Biochar_potential_based_on_biomass_availability_by_type_crop_residues.csv",
+    "stat_correction": true,
+    "units": "tons/year"
+  },
+  "Biochar potential based on biomass availability by type (biomass crops)": {
+    "title": "Biochar potential based on biomass availability by type (biomass crops)",
+    "filename": "Biochar_potential_based_on_biomass_availability_by_type_biomass_crops.csv",
+    "stat_correction": true,
+    "units": "tons/year"
+  },
+  "Biochar potential based on biomass availability by type (other residues)": {
+    "title": "Biochar potential based on biomass availability by type (other residues)",
+    "filename": "Biochar_potential_based_on_biomass_availability_by_type_other_residues.csv",
+    "stat_correction": true,
+    "units": "tons/year"
+  },
+  "Carbon content in biomass (%)": {
+    "title": "Carbon content in biomass (%)",
+    "filename": "Carbon_content_in_biomass.csv",
+    "stat_correction": true
+  },
+  "Estimated Fraction of Input Biochar that is output to be Sold": {
+    "title": "Estimated Fraction of Input Biochar that is output to be Sold",
+    "filename": "Estimated_Fraction_of_Input_Biochar_that_is_output_to_be_Sold.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/biogas/__init__.py b/solution/biogas/__init__.py
index 2c424acc7..167f74ded 100644
--- a/solution/biogas/__init__.py
+++ b/solution/biogas/__init__.py
@@ -28,91 +28,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CH4_CO2eq_Tons_Reduced.csv"),
-        use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "N2O_CO2eq_Tons_Reduced.csv"),
-        use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Coal_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Biogas Plant Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Biogas_Plant_Efficiency_Factor.csv"),
-        use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-    'Variable 30': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/biogas/vma_data/vma_sources.json b/solution/biogas/vma_data/vma_sources.json
new file mode 100644
index 000000000..82f7042bb
--- /dev/null
+++ b/solution/biogas/vma_data/vma_sources.json
@@ -0,0 +1,80 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "CH4-CO2eq Tons Reduced": {
+    "title": "CH4-CO2eq Tons Reduced",
+    "filename": "CH4_CO2eq_Tons_Reduced.csv",
+    "stat_correction": true,
+    "units": "t CH4-CO2eq per TWh"
+  },
+  "N2O-CO2eq Tons Reduced": {
+    "title": "N2O-CO2eq Tons Reduced",
+    "filename": "N2O_CO2eq_Tons_Reduced.csv",
+    "stat_correction": true,
+    "units": "t N2O-CO2eq per TWh"
+  },
+  "Biogas Plant Efficiency Factor": {
+    "title": "Biogas Plant Efficiency Factor",
+    "filename": "Biogas_Plant_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Discount Rate: Commercial / Industry": {
+    "title": "Discount Rate: Commercial / Industry",
+    "filename": "Discount_Rate_Commercial_Industry.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/biogas_small/__init__.py b/solution/biogas_small/__init__.py
index 59d3ba771..17d785677 100644
--- a/solution/biogas_small/__init__.py
+++ b/solution/biogas_small/__init__.py
@@ -27,85 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CH4_CO2eq_Tons_Reduced.csv"),
-            use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'tCO2/yr per digester': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "tCO2_yr_per_digester.csv"),
-            use_weight=False),
-    'Black carbon GWP': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Black_carbon_GWP.csv"),
-            use_weight=False),
-    't CO2 eq per Metric ton of fuel': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "t_CO2_eq_per_Metric_ton_of_fuel.csv"),
-            use_weight=True),
-    'Average Household Biodigester Production per year': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Average_Household_Biodigester_Production_per_year.csv"),
-            use_weight=False),
-    'Kerosene (Heating Oil) Spot Price': vma.VMA(
-            filename=DATADIR.joinpath(*('energy', 'vma_Kerosene_Heating_Oil_Spot_Price.csv')),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Biogas plant",
diff --git a/solution/biogas_small/vma_data/vma_sources.json b/solution/biogas_small/vma_data/vma_sources.json
new file mode 100644
index 000000000..16ff679be
--- /dev/null
+++ b/solution/biogas_small/vma_data/vma_sources.json
@@ -0,0 +1,101 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh (therms)"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Biogas plant"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Biogas plant"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "use_weight": true,
+    "units": "TWh (therms)/Biogas plant"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh (therms)/Biogas plant"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh (therms)/Biogas plant/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh (therms)/Biogas plant/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/kWh therm"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/kWh therm"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "TJ/TWh (therms)"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/TWh (therms)"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh (therms)"
+  },
+  "CH4-CO2eq Tons Reduced": {
+    "title": "CH4-CO2eq Tons Reduced",
+    "filename": "CH4_CO2eq_Tons_Reduced.csv",
+    "stat_correction": true,
+    "units": "t CH4-CO2eq per TWh (therms)"
+  },
+  "tCO2/yr per digester": {
+    "title": "tCO2/yr per digester",
+    "filename": "tCO2_yr_per_digester.csv",
+    "stat_correction": true
+  },
+  "Black carbon GWP": {
+    "title": "Black carbon GWP",
+    "filename": "Black_carbon_GWP.csv",
+    "stat_correction": true
+  },
+  "t CO2 eq per Metric ton of fuel": {
+    "title": "t CO2 eq per Metric ton of fuel",
+    "filename": "t_CO2_eq_per_Metric_ton_of_fuel.csv",
+    "use_weight": true,
+    "units": "t CO2/ton fuel"
+  },
+  "Average Household Biodigester Production per year": {
+    "title": "Average Household Biodigester Production per year",
+    "filename": "Average_Household_Biodigester_Production_per_year.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/biomass/__init__.py b/solution/biomass/__init__.py
index 4d0455b1e..9a1cfb39a 100644
--- a/solution/biomass/__init__.py
+++ b/solution/biomass/__init__.py
@@ -27,106 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CH4_CO2eq_Tons_Reduced.csv"),
-        use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Coal_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Biomass Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Biomass_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Learning Rate': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_Rate.csv"),
-        use_weight=False),
-    'Biomass Prices': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Biomass_Prices.csv"),
-        use_weight=False),
-    'Other emissions from biomass plants': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Other_emissions_from_biomass_plants.csv"),
-        use_weight=False),
-    'Thermal efficiency of biomass plants': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Thermal_efficiency_of_biomass_plants.csv"),
-        use_weight=False),
-    'CO2-eq reduced': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CO2_eq_reduced.csv"),
-        use_weight=False),
-    'Conversion from kWh to MMT of different biomass types': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Conversion_from_kWh_to_MMT_of_different_biomass_types.csv"),
-        use_weight=False),
-    'British Thermal Units for Bioenergy Crops': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "British_Thermal_Units_for_Bioenergy_Crops.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/biomass/vma_data/vma_sources.json b/solution/biomass/vma_data/vma_sources.json
new file mode 100644
index 000000000..6d67ddba0
--- /dev/null
+++ b/solution/biomass/vma_data/vma_sources.json
@@ -0,0 +1,133 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "CH4-CO2eq Tons Reduced": {
+    "title": "CH4-CO2eq Tons Reduced",
+    "filename": "CH4_CO2eq_Tons_Reduced.csv",
+    "stat_correction": true,
+    "units": "t CH4-CO2eq per TWh"
+  },
+  "Weighted Average CONVENTIONAL Plant Efficiency": {
+    "title": "Weighted Average CONVENTIONAL Plant Efficiency",
+    "filename": "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv",
+    "use_weight": true,
+    "units": "%"
+  },
+  "Coal Plant Efficiency": {
+    "title": "Coal Plant Efficiency",
+    "filename": "Coal_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Natural Gas Plant Efficiency": {
+    "title": "Natural Gas Plant Efficiency",
+    "filename": "Natural_Gas_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Biomass Plant Efficiency": {
+    "title": "Biomass Plant Efficiency",
+    "filename": "Biomass_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Learning Rate": {
+    "title": "Learning Rate",
+    "filename": "Learning_Rate.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Biomass Prices": {
+    "title": "Biomass Prices",
+    "filename": "Biomass_Prices.csv",
+    "stat_correction": true,
+    "units": "US$2014 per kWh"
+  },
+  "Other emissions from biomass plants": {
+    "title": "Other emissions from biomass plants",
+    "filename": "Other_emissions_from_biomass_plants.csv",
+    "stat_correction": true
+  },
+  "Thermal efficiency of biomass plants": {
+    "title": "Thermal efficiency of biomass plants",
+    "filename": "Thermal_efficiency_of_biomass_plants.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CO2-eq reduced": {
+    "title": "CO2-eq reduced",
+    "filename": "CO2_eq_reduced.csv",
+    "stat_correction": true,
+    "units": "t CO2eq per TWh"
+  },
+  "Conversion from kWh to MMT of different biomass types": {
+    "title": "Conversion from kWh to MMT of different biomass types",
+    "filename": "Conversion_from_kWh_to_MMT_of_different_biomass_types.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "British Thermal Units for Bioenergy Crops": {
+    "title": "British Thermal Units for Bioenergy Crops",
+    "filename": "British_Thermal_Units_for_Bioenergy_Crops.csv",
+    "stat_correction": true,
+    "units": "Btu/t"
+  }
+}
\ No newline at end of file
diff --git a/solution/bioplastic/__init__.py b/solution/bioplastic/__init__.py
index 7ca432095..ab693dec3 100644
--- a/solution/bioplastic/__init__.py
+++ b/solution/bioplastic/__init__.py
@@ -26,70 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Life cycle difference in GHG per kg of polymer for biopolymers compared to traditional polymers (kg CO2 eq/kg)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Life_cycle_difference_in_GHG_per_kg_of_polymer_for_biopolymers_compared_to_traditional_polymers_kg_CO2_eq_kg.csv"),
-            use_weight=False),
-    'Feedstock:MMT Bioplastic Constraint': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Feedstock_MMT_Bioplastic_Constraint.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "MMt of Plastic Produced Annually (Transient)",
diff --git a/solution/bioplastic/vma_data/vma_sources.json b/solution/bioplastic/vma_data/vma_sources.json
new file mode 100644
index 000000000..4c56880d3
--- /dev/null
+++ b/solution/bioplastic/vma_data/vma_sources.json
@@ -0,0 +1,55 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "MMt of Plastic Produced Annually"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/MMt of Plastic Produced Annually"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/MMt of Plastic Produced Annually"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "MMt of Plastic Produced Annually/MMt of Plastic Produced Annually/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "MMt of Plastic Produced Annually/MMt of Plastic Produced Annually/year"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/MMt of Plastic Produced Annually"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/MMt of Plastic Produced Annually"
+  },
+  "Life cycle difference in GHG per kg of polymer for biopolymers compared to traditional polymers (kg CO2 eq/kg)": {
+    "title": "Life cycle difference in GHG per kg of polymer for biopolymers compared to traditional polymers (kg CO2 eq/kg)",
+    "filename": "Life_cycle_difference_in_GHG_per_kg_of_polymer_for_biopolymers_compared_to_traditional_polymers_kg_CO2_eq_kg.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/MMT polymers"
+  },
+  "Feedstock:MMT Bioplastic Constraint": {
+    "title": "Feedstock:MMT Bioplastic Constraint",
+    "filename": "Feedstock_MMT_Bioplastic_Constraint.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/buildingautomation/__init__.py b/solution/buildingautomation/__init__.py
index e48ef9c5c..a78a007aa 100644
--- a/solution/buildingautomation/__init__.py
+++ b/solution/buildingautomation/__init__.py
@@ -26,96 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Energy_Efficiency_Factor.csv"),
-            use_weight=True),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-            use_weight=True),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Revenue_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Commercial Building Energy Consumption (kWh/m2/yr) (Weighted Average by Region)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Commercial_Building_Energy_Consumption_kWh_m2_yr_Weighted_Average_by_Region.csv"),
-            use_weight=True),
-    'Commercial Building Energy Consumption for Thermal Purposes (Heating and Cooling) (% of total)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Commercial_Building_Energy_Consumption_for_Thermal_Purposes_Heating_and_Cooling_of_total.csv"),
-            use_weight=True),
-    'Commercial Building Energy Consumption for Non-Thermal Purposes (all other end-uses) (% of total)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Commercial_Building_Energy_Consumption_for_Non_Thermal_Purposes_all_other_end_uses_of_total.csv"),
-            use_weight=True),
-    'Commercial Building Electricity Consumption for Space Heating (% of total)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Commercial_Building_Electricity_Consumption_for_Space_Heating_of_total.csv"),
-            use_weight=True),
-    'Commercial Building Electricity Consumption for Cooling (% of total)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Commercial_Building_Electricity_Consumption_for_Cooling_of_total.csv"),
-            use_weight=False),
-    'Commercial Building Fuel Consumption for Space Heating (% of total Space Heating/Cooling)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Commercial_Building_Fuel_Consumption_for_Space_Heating_of_total_Space_Heating_Cooling.csv"),
-            use_weight=False),
-    'BAS Efficiency Factors for Non-Thermal Efficiency (Electricity End-Uses)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "BAS_Efficiency_Factors_for_Non_Thermal_Efficiency_Electricity_End_Uses.csv"),
-            use_weight=True),
-    'BAS Efficiency Factors for Thermal Efficiency (Heating/Cooling End-Uses)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "BAS_Efficiency_Factors_for_Thermal_Efficiency_Heating_Cooling_End_Uses.csv"),
-            use_weight=True),
-    'Discount Rates - Commercial': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Discount_Rates_Commercial.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Mm²",
diff --git a/solution/buildingautomation/vma_data/vma_sources.json b/solution/buildingautomation/vma_data/vma_sources.json
new file mode 100644
index 000000000..48f23c674
--- /dev/null
+++ b/solution/buildingautomation/vma_data/vma_sources.json
@@ -0,0 +1,125 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million m2 commercial floor space"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/million m2 commercial floor space"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/million m2 commercial floor space"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "years"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "years"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "million m2 commercial floor space/million m2 commercial floor space/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "million m2 commercial floor space/million m2 commercial floor space/year"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/million m2 commercial floor space"
+  },
+  "SOLUTION Energy Efficiency Factor": {
+    "title": "SOLUTION Energy Efficiency Factor",
+    "filename": "SOLUTION_Energy_Efficiency_Factor.csv",
+    "use_weight": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TJ/million m2 commercial floor space"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "use_weight": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Revenue per Functional Unit": {
+    "title": "CONVENTIONAL Revenue per Functional Unit",
+    "filename": "CONVENTIONAL_Revenue_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014 per million m2 commercial floor space"
+  },
+  "Commercial Building Energy Consumption (kWh/m2/yr) (Weighted Average by Region)": {
+    "title": "Commercial Building Energy Consumption (kWh/m2/yr) (Weighted Average by Region)",
+    "filename": "Commercial_Building_Energy_Consumption_kWh_m2_yr_Weighted_Average_by_Region.csv",
+    "use_weight": true,
+    "units": "kWh/m2/yr"
+  },
+  "Commercial Building Energy Consumption for Thermal Purposes (Heating and Cooling) (% of total)": {
+    "title": "Commercial Building Energy Consumption for Thermal Purposes (Heating and Cooling) (% of total)",
+    "filename": "Commercial_Building_Energy_Consumption_for_Thermal_Purposes_Heating_and_Cooling_of_total.csv",
+    "use_weight": true
+  },
+  "Commercial Building Energy Consumption for Non-Thermal Purposes (all other end-uses) (% of total)": {
+    "title": "Commercial Building Energy Consumption for Non-Thermal Purposes (all other end-uses) (% of total)",
+    "filename": "Commercial_Building_Energy_Consumption_for_Non_Thermal_Purposes_all_other_end_uses_of_total.csv",
+    "use_weight": true
+  },
+  "Commercial Building Electricity Consumption for Space Heating (% of total)": {
+    "title": "Commercial Building Electricity Consumption for Space Heating (% of total)",
+    "filename": "Commercial_Building_Electricity_Consumption_for_Space_Heating_of_total.csv",
+    "use_weight": true
+  },
+  "Commercial Building Electricity Consumption for Cooling (% of total)": {
+    "title": "Commercial Building Electricity Consumption for Cooling (% of total)",
+    "filename": "Commercial_Building_Electricity_Consumption_for_Cooling_of_total.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Commercial Building Fuel Consumption for Space Heating (% of total Space Heating/Cooling)": {
+    "title": "Commercial Building Fuel Consumption for Space Heating (% of total Space Heating/Cooling)",
+    "filename": "Commercial_Building_Fuel_Consumption_for_Space_Heating_of_total_Space_Heating_Cooling.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "BAS Efficiency Factors for Non-Thermal Efficiency (Electricity End-Uses)": {
+    "title": "BAS Efficiency Factors for Non-Thermal Efficiency (Electricity End-Uses)",
+    "filename": "BAS_Efficiency_Factors_for_Non_Thermal_Efficiency_Electricity_End_Uses.csv",
+    "use_weight": true,
+    "units": "%"
+  },
+  "BAS Efficiency Factors for Thermal Efficiency (Heating/Cooling End-Uses)": {
+    "title": "BAS Efficiency Factors for Thermal Efficiency (Heating/Cooling End-Uses)",
+    "filename": "BAS_Efficiency_Factors_for_Thermal_Efficiency_Heating_Cooling_End_Uses.csv",
+    "use_weight": true,
+    "units": "%"
+  },
+  "Discount Rates - Commercial": {
+    "title": "Discount Rates - Commercial",
+    "filename": "Discount_Rates_Commercial.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/carpooling/__init__.py b/solution/carpooling/__init__.py
index 37f2a5508..f2d5711c7 100644
--- a/solution/carpooling/__init__.py
+++ b/solution/carpooling/__init__.py
@@ -26,78 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=True),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Ridesharing Car Occupancy': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Ridesharing_Car_Occupancy.csv"),
-        use_weight=True),
-    'Average Car Lifetime': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Car_Lifetime.csv"),
-        use_weight=False),
-    'Discount Rates - Households': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rates_Households.csv"),
-        use_weight=False),
-    'Current Average Car Occupancy': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Average_Car_Occupancy.csv"),
-        use_weight=True),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "trip",
diff --git a/solution/carpooling/vma_data/vma_sources.json b/solution/carpooling/vma_data/vma_sources.json
new file mode 100644
index 000000000..bd256741f
--- /dev/null
+++ b/solution/carpooling/vma_data/vma_sources.json
@@ -0,0 +1,77 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "use_weight": true,
+    "units": "passenger-km"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "passenger-km/veh-trip"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "passenger-km/veh-trip"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "passenger-km/veh-trip/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "passenger-km/veh-trip/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/passenger-km"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/passenger-km"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/passenger-km"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Average Ridesharing Car Occupancy": {
+    "title": "Average Ridesharing Car Occupancy",
+    "filename": "Average_Ridesharing_Car_Occupancy.csv",
+    "use_weight": true
+  },
+  "Average Car Lifetime": {
+    "title": "Average Car Lifetime",
+    "filename": "Average_Car_Lifetime.csv",
+    "stat_correction": true,
+    "units": "vehicle-km"
+  },
+  "Discount Rates - Households": {
+    "title": "Discount Rates - Households",
+    "filename": "Discount_Rates_Households.csv",
+    "stat_correction": true
+  },
+  "Current Average Car Occupancy": {
+    "title": "Current Average Car Occupancy",
+    "filename": "Current_Average_Car_Occupancy.csv",
+    "use_weight": true
+  }
+}
\ No newline at end of file
diff --git a/solution/commercialglass/__init__.py b/solution/commercialglass/__init__.py
index 1eba3f600..773824715 100644
--- a/solution/commercialglass/__init__.py
+++ b/solution/commercialglass/__init__.py
@@ -26,84 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Heating Energy Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Heating_Energy_Efficiency.csv"),
-        use_weight=False),
-    'Cooling Energy Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Cooling_Energy_Efficiency.csv"),
-        use_weight=False),
-    'Average Energy for Space Cooling per Floor Area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Energy_for_Space_Cooling_per_Floor_Area.csv"),
-        use_weight=False),
-    'Average Energy for Space Heating per Floor Area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Energy_for_Space_Heating_per_Floor_Area.csv"),
-        use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-    'Commercial Window to Floor Ratio': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Commercial_Window_to_Floor_Ratio.csv"),
-        use_weight=True),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "million sq-meters",
@@ -249,4 +172,4 @@ def __init__(self, scen=None):
 
         self.r2s = rrs.RRS(total_energy_demand=ref_tam_per_region.loc[2014, 'World'],
             soln_avg_annual_use=self.ac.soln_avg_annual_use,
-            conv_avg_annual_use=self.ac.conv_avg_annual_use)
+            conv_avg_annual_use=self.ac.conv_avg_annual_use)
\ No newline at end of file
diff --git a/solution/commercialglass/vma_data/vma_sources.json b/solution/commercialglass/vma_data/vma_sources.json
new file mode 100644
index 000000000..9afcfa773
--- /dev/null
+++ b/solution/commercialglass/vma_data/vma_sources.json
@@ -0,0 +1,88 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million sq-meters"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/million sq-meters"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/million sq-meters"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "million sq-meters/million sq-meters"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "million sq-meters/million sq-meters"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/million sq-meters"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/million sq-meters"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TJ/million sq-meters"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Heating Energy Efficiency": {
+    "title": "Heating Energy Efficiency",
+    "filename": "Heating_Energy_Efficiency.csv",
+    "stat_correction": true
+  },
+  "Cooling Energy Efficiency": {
+    "title": "Cooling Energy Efficiency",
+    "filename": "Cooling_Energy_Efficiency.csv",
+    "stat_correction": true
+  },
+  "Average Energy for Space Cooling per Floor Area": {
+    "title": "Average Energy for Space Cooling per Floor Area",
+    "filename": "Average_Energy_for_Space_Cooling_per_Floor_Area.csv",
+    "stat_correction": true,
+    "units": "kWh/m2"
+  },
+  "Average Energy for Space Heating per Floor Area": {
+    "title": "Average Energy for Space Heating per Floor Area",
+    "filename": "Average_Energy_for_Space_Heating_per_Floor_Area.csv",
+    "stat_correction": true,
+    "units": "kWh/m2"
+  },
+  "Discount Rate: Commercial / Industry": {
+    "title": "Discount Rate: Commercial / Industry",
+    "filename": "Discount_Rate_Commercial_Industry.csv",
+    "stat_correction": true
+  },
+  "Commercial Window to Floor Ratio": {
+    "title": "Commercial Window to Floor Ratio",
+    "filename": "Commercial_Window_to_Floor_Ratio.csv",
+    "use_weight": true
+  }
+}
\ No newline at end of file
diff --git a/solution/composting/__init__.py b/solution/composting/__init__.py
index e4b2cdc22..38606c306 100644
--- a/solution/composting/__init__.py
+++ b/solution/composting/__init__.py
@@ -26,79 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Revenue_per_Functional_Unit.csv"),
-        use_weight=False),
-    'COLLECTION COSTS': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "COLLECTION_COSTS.csv"),
-        use_weight=False),
-    'SOLUTION Market Breakdown - % in-vessel': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Market_Breakdown_in_vessel.csv"),
-        use_weight=False),
-    'SOLUTION - Capacities of composters': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Capacities_of_composters.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "MMt",
diff --git a/solution/composting/vma_data/vma_sources.json b/solution/composting/vma_data/vma_sources.json
new file mode 100644
index 000000000..74daa4ffa
--- /dev/null
+++ b/solution/composting/vma_data/vma_sources.json
@@ -0,0 +1,98 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Million Metric t (Organic Waste)"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Facility for 1 Million Metric tonnes Organics per year"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Facility for 1 Million Metric tonnes Organics per year"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Million Metric t (Organic Waste)/Facility for 1 Million Metric tonnes Organics per year"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Million Metric t (Organic Waste)/Facility for 1 Million Metric tonnes Organics per year"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Million Metric t (Organic Waste)/Facility for 1 Million Metric tonnes Organics per year/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Million Metric t (Organic Waste)/Facility for 1 Million Metric tonnes Organics per year/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Million Metric t (Organic Waste)"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Million Metric t (Organic Waste)"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Million Metric t (Organic Waste)"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Million Metric t (Organic Waste)"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Million Metric t (Organic Waste)"
+  },
+  "SOLUTION Revenue per Functional Unit": {
+    "title": "SOLUTION Revenue per Functional Unit",
+    "filename": "SOLUTION_Revenue_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014 per Million Metric t (Organic Waste)"
+  },
+  "COLLECTION COSTS": {
+    "title": "COLLECTION COSTS",
+    "filename": "COLLECTION_COSTS.csv",
+    "stat_correction": true,
+    "units": "US$2014/million tonne"
+  },
+  "SOLUTION Market Breakdown - % in-vessel": {
+    "title": "SOLUTION Market Breakdown - % in-vessel",
+    "filename": "SOLUTION_Market_Breakdown_in_vessel.csv",
+    "stat_correction": true,
+    "units": "% of waste processed"
+  },
+  "SOLUTION - Capacities of composters": {
+    "title": "SOLUTION - Capacities of composters",
+    "filename": "SOLUTION_Capacities_of_composters.csv",
+    "stat_correction": true,
+    "units": "Million Metric t (Organic Waste)/Facility for 1 Million Metric tonnes Organics per year/year"
+  }
+}
\ No newline at end of file
diff --git a/solution/concentratedsolar/__init__.py b/solution/concentratedsolar/__init__.py
index 9f426f76b..af775308e 100644
--- a/solution/concentratedsolar/__init__.py
+++ b/solution/concentratedsolar/__init__.py
@@ -27,89 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Coal_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Learning rate': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_rate.csv"),
-        use_weight=False),
-    'Annual CO2 savings from STE': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Annual_CO2_savings_from_STE.csv"),
-        use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/concentratedsolar/vma_data/vma_sources.json b/solution/concentratedsolar/vma_data/vma_sources.json
new file mode 100644
index 000000000..1c0d42126
--- /dev/null
+++ b/solution/concentratedsolar/vma_data/vma_sources.json
@@ -0,0 +1,62 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "Learning rate": {
+    "title": "Learning rate",
+    "filename": "Learning_rate.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Annual CO2 savings from STE": {
+    "title": "Annual CO2 savings from STE",
+    "filename": "Annual_CO2_savings_from_STE.csv",
+    "stat_correction": true,
+    "units": "MT of CO2-eq"
+  }
+}
\ No newline at end of file
diff --git a/solution/conservationagriculture/__init__.py b/solution/conservationagriculture/__init__.py
index 01fba7a27..30a697f6f 100644
--- a/solution/conservationagriculture/__init__.py
+++ b/solution/conservationagriculture/__init__.py
@@ -27,68 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_from_CONVENTIONAL_Practice.csv"),
-        use_weight=True),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per  Implementation Unit - SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'Dataset to Use for Projecting Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Dataset_to_Use_for_Projecting_Adoption.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/conservationagriculture/vma_data/vma_sources.json b/solution/conservationagriculture/vma_data/vma_sources.json
new file mode 100644
index 000000000..0b4c90a86
--- /dev/null
+++ b/solution/conservationagriculture/vma_data/vma_sources.json
@@ -0,0 +1,67 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Yield from CONVENTIONAL Practice": {
+    "title": "Yield from CONVENTIONAL Practice",
+    "filename": "Yield_from_CONVENTIONAL_Practice.csv",
+    "use_weight": true,
+    "units": "t/ha/yr"
+  },
+  "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)": {
+    "title": "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)",
+    "filename": "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha/year"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Dataset to Use for Projecting Adoption": {
+    "title": "Dataset to Use for Projecting Adoption",
+    "filename": "Dataset_to_Use_for_Projecting_Adoption.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/coolroofs/__init__.py b/solution/coolroofs/__init__.py
index f51d13e42..ebde78156 100644
--- a/solution/coolroofs/__init__.py
+++ b/solution/coolroofs/__init__.py
@@ -26,76 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-            use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-            use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Energy_Efficiency_Factor.csv"),
-            use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-            use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Global Average Number of Floors Commercial Buildings': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Global_Average_Number_of_Floors_Commercial_Buildings.csv"),
-            use_weight=False),
-    'Global Average Number of Floors Residential Buildings': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Global_Average_Number_of_Floors_Residential_Buildings.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "m²",
diff --git a/solution/coolroofs/vma_data/vma_sources.json b/solution/coolroofs/vma_data/vma_sources.json
new file mode 100644
index 000000000..15227df05
--- /dev/null
+++ b/solution/coolroofs/vma_data/vma_sources.json
@@ -0,0 +1,90 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Residential and Commercial roof area, m2"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Residential and Commercial roof area, m2"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Residential and Commercial roof area, m2"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Residential and Commercial roof area, m2/Residential and Commercial roof area, m2"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Residential and Commercial roof area, m2/Residential and Commercial roof area, m2"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Residential and Commercial roof area, m2"
+  },
+  "CONVENTIONAL Fixed Operating Cost (FOM)": {
+    "title": "CONVENTIONAL Fixed Operating Cost (FOM)",
+    "filename": "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US2014$/Residential and Commercial roof area, m2"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US2014$/Residential and Commercial roof area, m2"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/Residential and Commercial roof area, m2"
+  },
+  "SOLUTION Energy Efficiency Factor": {
+    "title": "SOLUTION Energy Efficiency Factor",
+    "filename": "SOLUTION_Energy_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TJ/Residential and Commercial roof area, m2"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Residential and Commercial roof area, m2"
+  },
+  "Global Average Number of Floors Commercial Buildings": {
+    "title": "Global Average Number of Floors Commercial Buildings",
+    "filename": "Global_Average_Number_of_Floors_Commercial_Buildings.csv",
+    "stat_correction": true
+  },
+  "Global Average Number of Floors Residential Buildings": {
+    "title": "Global Average Number of Floors Residential Buildings",
+    "filename": "Global_Average_Number_of_Floors_Residential_Buildings.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/districtheating/__init__.py b/solution/districtheating/__init__.py
index b0b6945ce..90bd9c2b8 100644
--- a/solution/districtheating/__init__.py
+++ b/solution/districtheating/__init__.py
@@ -27,82 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-            use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-            use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'TAM Share for Space Heating': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "TAM_Share_for_Space_Heating.csv"),
-            use_weight=False),
-    'First Costs of Exchange Heaters for Households': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "First_Costs_of_Exchange_Heaters_for_Households.csv"),
-            use_weight=False),
-    'Fixed Costs of Exchange Heaters': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Fixed_Costs_of_Exchange_Heaters.csv"),
-            use_weight=False),
-    'Learning Rate': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Learning_Rate.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/districtheating/vma_data/vma_sources.json b/solution/districtheating/vma_data/vma_sources.json
new file mode 100644
index 000000000..34ea588a7
--- /dev/null
+++ b/solution/districtheating/vma_data/vma_sources.json
@@ -0,0 +1,104 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "Hours"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Hours"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/kWh"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/kWh"
+  },
+  "CONVENTIONAL Fixed Operating Cost (FOM)": {
+    "title": "CONVENTIONAL Fixed Operating Cost (FOM)",
+    "filename": "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv",
+    "use_weight": true,
+    "units": "US$2014/kW/year"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/TWh"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TJ/TWh/year"
+  },
+  "TAM Share for Space Heating": {
+    "title": "TAM Share for Space Heating",
+    "filename": "TAM_Share_for_Space_Heating.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "First Costs of Exchange Heaters for Households": {
+    "title": "First Costs of Exchange Heaters for Households",
+    "filename": "First_Costs_of_Exchange_Heaters_for_Households.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "Fixed Costs of Exchange Heaters": {
+    "title": "Fixed Costs of Exchange Heaters",
+    "filename": "Fixed_Costs_of_Exchange_Heaters.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "Learning Rate": {
+    "title": "Learning Rate",
+    "filename": "Learning_Rate.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/electricbikes/__init__.py b/solution/electricbikes/__init__.py
index 2fe155b70..aa4862dd1 100644
--- a/solution/electricbikes/__init__.py
+++ b/solution/electricbikes/__init__.py
@@ -26,104 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=True),
-    'Indirect CO2 Emissions per SOLUTION Unit (Select on Advanced Controls)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Indirect_CO2_Emissions_per_SOLUTION_Unit_Select_on_Advanced_Controls.csv"),
-        use_weight=True),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Car Occupancy': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Car_Occupancy.csv"),
-        use_weight=False),
-    'Average Car Lifetime': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Car_Lifetime.csv"),
-        use_weight=False),
-    'Discount Rates - Households': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rates_Households.csv"),
-        use_weight=False),
-    'Average Annual Passenger-km per Car': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Annual_Passenger_km_per_Car.csv"),
-        use_weight=False),
-    'First Cost of ICE Car': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "First_Cost_of_ICE_Car.csv"),
-        use_weight=True),
-    'Average Bike Pass-km per Year': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Bike_Pass_km_per_Year.csv"),
-        use_weight=False),
-    'E-bike Battery Size': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "E_bike_Battery_Size.csv"),
-        use_weight=True),
-    'E-bike Work Rate': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "E_bike_Work_Rate.csv"),
-        use_weight=False),
-    'Percentage of E-bike Rides with 2 Riders': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Percentage_of_E_bike_Rides_with_2_Riders.csv"),
-        use_weight=False),
-    'Fuel Consumed per pkm - CONVENTIONAL': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Fuel_Consumed_per_pkm_CONVENTIONAL.csv"),
-        use_weight=False),
-    'Car Maintenance  Cost per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Car_Maintenance_Cost_per_Functional_Unit.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "MWh of Batteries",
diff --git a/solution/electricbikes/vma_data/vma_sources.json b/solution/electricbikes/vma_data/vma_sources.json
new file mode 100644
index 000000000..a318a260f
--- /dev/null
+++ b/solution/electricbikes/vma_data/vma_sources.json
@@ -0,0 +1,147 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Billion PKM"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/MWh of Battery Equivalent"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/MWh of Battery Equivalent"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "use_weight": true,
+    "units": "Billion PKM/MWh of Battery Equivalent"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "use_weight": true,
+    "units": "Billion PKM/MWh of Battery Equivalent"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Billion PKM/MWh of Battery Equivalent/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Billion PKM/MWh of Battery Equivalent/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Billion PKM"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/Billion PKM"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/Billion PKM"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/Billion PKM"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Billion PKM"
+  },
+  "Indirect CO2 Emissions per SOLUTION Unit (Select on Advanced Controls)": {
+    "title": "Indirect CO2 Emissions per SOLUTION Unit (Select on Advanced Controls)",
+    "filename": "Indirect_CO2_Emissions_per_SOLUTION_Unit_Select_on_Advanced_Controls.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Billion PKM"
+  },
+  "Average Car Occupancy": {
+    "title": "Average Car Occupancy",
+    "filename": "Average_Car_Occupancy.csv",
+    "stat_correction": true
+  },
+  "Average Car Lifetime": {
+    "title": "Average Car Lifetime",
+    "filename": "Average_Car_Lifetime.csv",
+    "stat_correction": true,
+    "units": "pass-km"
+  },
+  "Discount Rates - Households": {
+    "title": "Discount Rates - Households",
+    "filename": "Discount_Rates_Households.csv",
+    "stat_correction": true,
+    "units": "Percent"
+  },
+  "Average Annual Passenger-km per Car": {
+    "title": "Average Annual Passenger-km per Car",
+    "filename": "Average_Annual_Passenger_km_per_Car.csv",
+    "stat_correction": true
+  },
+  "First Cost of ICE Car": {
+    "title": "First Cost of ICE Car",
+    "filename": "First_Cost_of_ICE_Car.csv",
+    "use_weight": true,
+    "units": "US2014$/vehicle"
+  },
+  "Average Bike Pass-km per Year": {
+    "title": "Average Bike Pass-km per Year",
+    "filename": "Average_Bike_Pass_km_per_Year.csv",
+    "stat_correction": true
+  },
+  "E-bike Battery Size": {
+    "title": "E-bike Battery Size",
+    "filename": "E_bike_Battery_Size.csv",
+    "use_weight": true
+  },
+  "E-bike Work Rate": {
+    "title": "E-bike Work Rate",
+    "filename": "E_bike_Work_Rate.csv",
+    "stat_correction": true,
+    "units": "Wh/km"
+  },
+  "Percentage of E-bike Rides with 2 Riders": {
+    "title": "Percentage of E-bike Rides with 2 Riders",
+    "filename": "Percentage_of_E_bike_Rides_with_2_Riders.csv",
+    "stat_correction": true
+  },
+  "Fuel Consumed per pkm - CONVENTIONAL": {
+    "title": "Fuel Consumed per pkm - CONVENTIONAL",
+    "filename": "Fuel_Consumed_per_pkm_CONVENTIONAL.csv",
+    "stat_correction": true,
+    "units": "Liter/Billion PKM"
+  },
+  "Car Maintenance  Cost per Functional Unit": {
+    "title": "Car Maintenance  Cost per Functional Unit",
+    "filename": "Car_Maintenance_Cost_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Billion PKM"
+  }
+}
\ No newline at end of file
diff --git a/solution/electricvehicles/__init__.py b/solution/electricvehicles/__init__.py
index d1cd9572d..f903265f2 100644
--- a/solution/electricvehicles/__init__.py
+++ b/solution/electricvehicles/__init__.py
@@ -28,91 +28,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=True),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=True),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Car Occupancy': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Car_Occupancy.csv"),
-        use_weight=False),
-    'Fraction of BEV+PHEV market that is BEV': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Fraction_of_BEV_PHEV_market_that_is_BEV.csv"),
-        use_weight=False),
-    'Discount Rates - Households': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rates_Households.csv"),
-        use_weight=False),
-    'CONVENTIONAL Car Occupancy': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Car_Occupancy.csv"),
-        use_weight=False),
-    'EV Learning Rate': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "EV_Learning_Rate.csv"),
-        use_weight=False),
-    'Average Annual EV Car Vehicle km': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Annual_EV_Car_Vehicle_km.csv"),
-        use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "vehicle",
diff --git a/solution/electricvehicles/vma_data/vma_sources.json b/solution/electricvehicles/vma_data/vma_sources.json
new file mode 100644
index 000000000..7f4ee720a
--- /dev/null
+++ b/solution/electricvehicles/vma_data/vma_sources.json
@@ -0,0 +1,129 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/vehicle"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/vehicle"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/vehicle"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/vehicle"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/vehicle/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/vehicle/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/billion passenger-km"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/billion passenger-km"
+  },
+  "CONVENTIONAL Fixed Operating Cost (FOM)": {
+    "title": "CONVENTIONAL Fixed Operating Cost (FOM)",
+    "filename": "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US2014$/year/vehicle"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US2014$/year/vehicle"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "TWh/billion passenger-km"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/billion passenger-km"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "use_weight": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/vehicle"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/vehicle"
+  },
+  "SOLUTION Car Occupancy": {
+    "title": "SOLUTION Car Occupancy",
+    "filename": "SOLUTION_Car_Occupancy.csv",
+    "stat_correction": true
+  },
+  "Fraction of BEV+PHEV market that is BEV": {
+    "title": "Fraction of BEV+PHEV market that is BEV",
+    "filename": "Fraction_of_BEV_PHEV_market_that_is_BEV.csv",
+    "stat_correction": true
+  },
+  "Discount Rates - Households": {
+    "title": "Discount Rates - Households",
+    "filename": "Discount_Rates_Households.csv",
+    "stat_correction": true
+  },
+  "CONVENTIONAL Car Occupancy": {
+    "title": "CONVENTIONAL Car Occupancy",
+    "filename": "CONVENTIONAL_Car_Occupancy.csv",
+    "stat_correction": true
+  },
+  "EV Learning Rate": {
+    "title": "EV Learning Rate",
+    "filename": "EV_Learning_Rate.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Average Annual EV Car Vehicle km": {
+    "title": "Average Annual EV Car Vehicle km",
+    "filename": "Average_Annual_EV_Car_Vehicle_km.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/farmlandrestoration/__init__.py b/solution/farmlandrestoration/__init__.py
index e61235644..cfb9cea07 100644
--- a/solution/farmlandrestoration/__init__.py
+++ b/solution/farmlandrestoration/__init__.py
@@ -27,64 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield from restored abandoned farmlands': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_from_restored_abandoned_farmlands.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/farmlandrestoration/vma_data/vma_sources.json b/solution/farmlandrestoration/vma_data/vma_sources.json
new file mode 100644
index 000000000..52a71a3d9
--- /dev/null
+++ b/solution/farmlandrestoration/vma_data/vma_sources.json
@@ -0,0 +1,44 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha/year"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Yield from restored abandoned farmlands": {
+    "title": "Yield from restored abandoned farmlands",
+    "filename": "Yield_from_restored_abandoned_farmlands.csv",
+    "stat_correction": true,
+    "units": "Kg/ha/yr"
+  }
+}
\ No newline at end of file
diff --git a/solution/forestprotection/__init__.py b/solution/forestprotection/__init__.py
index 9f6431d63..d9349ba4d 100644
--- a/solution/forestprotection/__init__.py
+++ b/solution/forestprotection/__init__.py
@@ -27,77 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Electricty Used DEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Energy Efficiency Factor UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'ALTERNATIVE APPROACH Annual Energy Used UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed on DEGRADED Land': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor for UNDEGRADED Land': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2-eq Emissions DEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2-eq Emissions UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Growth Rate of Land Degradation': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Growth_Rate_of_Land_Degradation.csv"),
-        use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Disturbance_Rate.csv"),
-        use_weight=False),
-    't C storage in Protected Landtype': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_C_storage_in_Protected_Landtype.csv"),
-        use_weight=False),
-    'Global Multipler for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Tropical Multipler for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Temperate Multiplier for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Cost of avoided emission': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Cost_of_avoided_emission.csv"),
-        use_weight=False),
-    'Forest area with Forest Management Plan': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Forest_area_with_Forest_Management_Plan.csv"),
-        use_weight=False),
-    'Forest area with Forest Management Plan for Production': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Forest_area_with_Forest_Management_Plan_for_Production.csv"),
-        use_weight=False),
-    'Forest area with Forest Management Plan for Conservation': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Forest_area_with_Forest_Management_Plan_for_Conservation.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/forestprotection/vma_data/vma_sources.json b/solution/forestprotection/vma_data/vma_sources.json
new file mode 100644
index 000000000..b0c9d19ef
--- /dev/null
+++ b/solution/forestprotection/vma_data/vma_sources.json
@@ -0,0 +1,62 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Growth Rate of Land Degradation": {
+    "title": "Growth Rate of Land Degradation",
+    "filename": "Growth_Rate_of_Land_Degradation.csv",
+    "stat_correction": true,
+    "units": "% Annually"
+  },
+  "Disturbance Rate": {
+    "title": "Disturbance Rate",
+    "filename": "Disturbance_Rate.csv",
+    "stat_correction": true,
+    "units": "% Annually"
+  },
+  "t C storage in Protected Landtype": {
+    "title": "t C storage in Protected Landtype",
+    "filename": "t_C_storage_in_Protected_Landtype.csv",
+    "stat_correction": true,
+    "units": "t C/ha"
+  },
+  "Cost of avoided emission": {
+    "title": "Cost of avoided emission",
+    "filename": "Cost_of_avoided_emission.csv",
+    "stat_correction": true,
+    "units": "USD/t CO2-eq"
+  },
+  "Forest area with Forest Management Plan": {
+    "title": "Forest area with Forest Management Plan",
+    "filename": "Forest_area_with_Forest_Management_Plan.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "Forest area with Forest Management Plan for Production": {
+    "title": "Forest area with Forest Management Plan for Production",
+    "filename": "Forest_area_with_Forest_Management_Plan_for_Production.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "Forest area with Forest Management Plan for Conservation": {
+    "title": "Forest area with Forest Management Plan for Conservation",
+    "filename": "Forest_area_with_Forest_Management_Plan_for_Conservation.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  }
+}
\ No newline at end of file
diff --git a/solution/geothermal/__init__.py b/solution/geothermal/__init__.py
index 5b035bbcf..db1c7b293 100644
--- a/solution/geothermal/__init__.py
+++ b/solution/geothermal/__init__.py
@@ -27,89 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Coal_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Learning Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_Rates.csv"),
-        use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-    'Geothermal Availability': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Geothermal_Availability.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/geothermal/vma_data/vma_sources.json b/solution/geothermal/vma_data/vma_sources.json
new file mode 100644
index 000000000..580177c50
--- /dev/null
+++ b/solution/geothermal/vma_data/vma_sources.json
@@ -0,0 +1,98 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "use_weight": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "2005-2014 Average CONVENTIONAL Fuel Price per functional unit": {
+    "title": "2005-2014 Average CONVENTIONAL Fuel Price per functional unit",
+    "filename": "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv",
+    "use_weight": true,
+    "units": "$US2014/kWh"
+  },
+  "Weighted Average CONVENTIONAL Plant Efficiency": {
+    "title": "Weighted Average CONVENTIONAL Plant Efficiency",
+    "filename": "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv",
+    "use_weight": true,
+    "units": "%"
+  },
+  "Coal Plant Efficiency": {
+    "title": "Coal Plant Efficiency",
+    "filename": "Coal_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Natural Gas Plant Efficiency": {
+    "title": "Natural Gas Plant Efficiency",
+    "filename": "Natural_Gas_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Learning Rates": {
+    "title": "Learning Rates",
+    "filename": "Learning_Rates.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Geothermal Availability": {
+    "title": "Geothermal Availability",
+    "filename": "Geothermal_Availability.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  }
+}
\ No newline at end of file
diff --git a/solution/grasslandprotection/__init__.py b/solution/grasslandprotection/__init__.py
index cace0aec7..5613d0ce3 100644
--- a/solution/grasslandprotection/__init__.py
+++ b/solution/grasslandprotection/__init__.py
@@ -27,64 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Electricty Used DEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Energy Efficiency Factor UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'ALTERNATIVE APPROACH Annual Energy Used UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed on DEGRADED Land': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor for UNDEGRADED Land': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2-eq Emissions DEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2-eq Emissions UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Growth Rate of Land Degradation': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Growth_Rate_of_Land_Degradation.csv"),
-        use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    't C storage in Protected Landtype': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_C_storage_in_Protected_Landtype.csv"),
-        use_weight=False),
-    'Global Multipler for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Tropical Multipler for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Temperate Multiplier for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/grasslandprotection/vma_data/vma_sources.json b/solution/grasslandprotection/vma_data/vma_sources.json
new file mode 100644
index 000000000..8a0308062
--- /dev/null
+++ b/solution/grasslandprotection/vma_data/vma_sources.json
@@ -0,0 +1,32 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Growth Rate of Land Degradation": {
+    "title": "Growth Rate of Land Degradation",
+    "filename": "Growth_Rate_of_Land_Degradation.csv",
+    "stat_correction": true,
+    "units": "% Annually"
+  },
+  "t C storage in Protected Landtype": {
+    "title": "t C storage in Protected Landtype",
+    "filename": "t_C_storage_in_Protected_Landtype.csv",
+    "stat_correction": true,
+    "units": "t C/ha"
+  }
+}
\ No newline at end of file
diff --git a/solution/greenroofs/__init__.py b/solution/greenroofs/__init__.py
index 6172480e2..df5e3e03e 100644
--- a/solution/greenroofs/__init__.py
+++ b/solution/greenroofs/__init__.py
@@ -26,90 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-            use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Global Average Number of Floors Commercial Buildings': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Global_Average_Number_of_Floors_Commercial_Buildings.csv"),
-            use_weight=False),
-    'Global Average Number of Floors Residential Buildings': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Global_Average_Number_of_Floors_Residential_Buildings.csv"),
-            use_weight=False),
-    'Operating and Maintenance Costs per m2 CONVENTIONAL': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Operating_and_Maintenance_Costs_per_m2_CONVENTIONAL.csv"),
-            use_weight=False),
-    'Operating and Maintenance Costs per m2 SOLUTION': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Operating_and_Maintenance_Costs_per_m2_SOLUTION.csv"),
-            use_weight=False),
-    'STORMWATER Related Costs CONVENTIONAL': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "STORMWATER_Related_Costs_CONVENTIONAL.csv"),
-            use_weight=False),
-    'STORMWATER Related Costs SOLUTION': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "STORMWATER_Related_Costs_SOLUTION.csv"),
-            use_weight=False),
-    'ENERGY RELATED Operating Cost Benefits SOLUTION (per m2)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "ENERGY_RELATED_Operating_Cost_Benefits_SOLUTION_per_m2.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "m²",
diff --git a/solution/greenroofs/vma_data/vma_sources.json b/solution/greenroofs/vma_data/vma_sources.json
new file mode 100644
index 000000000..d7fcc9dbb
--- /dev/null
+++ b/solution/greenroofs/vma_data/vma_sources.json
@@ -0,0 +1,109 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Residential and Commercial roof area, m2"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Residential and Commercial roof area, m2"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Residential and Commercial roof area, m2"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Residential and Commercial roof area, m2/Residential and Commercial roof area, m2"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Residential and Commercial roof area, m2/Residential and Commercial roof area, m2"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Residential and Commercial roof area, m2/Residential and Commercial roof area, m2/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Residential and Commercial roof area, m2/Residential and Commercial roof area, m2/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Residential and Commercial roof area, m2"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Residential and Commercial roof area, m2"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TJ/Residential and Commercial roof area, m2"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Residential and Commercial roof area, m2"
+  },
+  "Global Average Number of Floors Commercial Buildings": {
+    "title": "Global Average Number of Floors Commercial Buildings",
+    "filename": "Global_Average_Number_of_Floors_Commercial_Buildings.csv",
+    "stat_correction": true
+  },
+  "Global Average Number of Floors Residential Buildings": {
+    "title": "Global Average Number of Floors Residential Buildings",
+    "filename": "Global_Average_Number_of_Floors_Residential_Buildings.csv",
+    "stat_correction": true
+  },
+  "Operating and Maintenance Costs per m2 CONVENTIONAL": {
+    "title": "Operating and Maintenance Costs per m2 CONVENTIONAL",
+    "filename": "Operating_and_Maintenance_Costs_per_m2_CONVENTIONAL.csv",
+    "stat_correction": true
+  },
+  "Operating and Maintenance Costs per m2 SOLUTION": {
+    "title": "Operating and Maintenance Costs per m2 SOLUTION",
+    "filename": "Operating_and_Maintenance_Costs_per_m2_SOLUTION.csv",
+    "stat_correction": true
+  },
+  "STORMWATER Related Costs CONVENTIONAL": {
+    "title": "STORMWATER Related Costs CONVENTIONAL",
+    "filename": "STORMWATER_Related_Costs_CONVENTIONAL.csv",
+    "stat_correction": true
+  },
+  "STORMWATER Related Costs SOLUTION": {
+    "title": "STORMWATER Related Costs SOLUTION",
+    "filename": "STORMWATER_Related_Costs_SOLUTION.csv",
+    "stat_correction": true
+  },
+  "ENERGY RELATED Operating Cost Benefits SOLUTION (per m2)": {
+    "title": "ENERGY RELATED Operating Cost Benefits SOLUTION (per m2)",
+    "filename": "ENERGY_RELATED_Operating_Cost_Benefits_SOLUTION_per_m2.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/hcrecycling/__init__.py b/solution/hcrecycling/__init__.py
index 8fc31aaf4..913e9b78b 100644
--- a/solution/hcrecycling/__init__.py
+++ b/solution/hcrecycling/__init__.py
@@ -26,79 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=True),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Revenue_per_Functional_Unit.csv"),
-        use_weight=True),
-    'MSW Collection Operating Costs': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "MSW_Collection_Operating_Costs.csv"),
-        use_weight=False),
-    'Emissions from Collection': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Emissions_from_Collection.csv"),
-        use_weight=False),
-    'Replacement rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Replacement_rates.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Facility for Million t of MSW / Yr",
diff --git a/solution/hcrecycling/vma_data/vma_sources.json b/solution/hcrecycling/vma_data/vma_sources.json
new file mode 100644
index 000000000..d3eacc5bc
--- /dev/null
+++ b/solution/hcrecycling/vma_data/vma_sources.json
@@ -0,0 +1,98 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Million Metric t of Recyclable MSW"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Facility for Million t of MSW/Yr"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Facility for Million t of MSW/Yr"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Million Metric t of Recyclable MSW/Facility for Million t of MSW/Yr"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Million Metric t of Recyclable MSW/Facility for Million t of MSW/Yr"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Million Metric t of Recyclable MSW/Facility for Million t of MSW/Yr/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Million Metric t of Recyclable MSW/Facility for Million t of MSW/Yr/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Million Metric t of Recyclable MSW"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Million Metric t of Recyclable MSW"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Million Metric t of Recyclable MSW"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Million Metric t of Recyclable MSW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Million Metric t of Recyclable MSW"
+  },
+  "SOLUTION Revenue per Functional Unit": {
+    "title": "SOLUTION Revenue per Functional Unit",
+    "filename": "SOLUTION_Revenue_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014 per Million Metric t of Recyclable MSW"
+  },
+  "MSW Collection Operating Costs": {
+    "title": "MSW Collection Operating Costs",
+    "filename": "MSW_Collection_Operating_Costs.csv",
+    "stat_correction": true,
+    "units": "US$2014/million tonne"
+  },
+  "Emissions from Collection": {
+    "title": "Emissions from Collection",
+    "filename": "Emissions_from_Collection.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/MMT"
+  },
+  "Replacement rates": {
+    "title": "Replacement rates",
+    "filename": "Replacement_rates.csv",
+    "stat_correction": true,
+    "units": "kg waste/kg new product"
+  }
+}
\ No newline at end of file
diff --git a/solution/heatpumps/__init__.py b/solution/heatpumps/__init__.py
index 5e6fb75f7..64400970b 100644
--- a/solution/heatpumps/__init__.py
+++ b/solution/heatpumps/__init__.py
@@ -26,91 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=True),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-            use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-            use_weight=True),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-            use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'TAM Share from Space Heating': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "TAM_Share_from_Space_Heating.csv"),
-            use_weight=False),
-    'High Efficiency Heat Pump Coefficient of Performance': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "High_Efficiency_Heat_Pump_Coefficient_of_Performance.csv"),
-            use_weight=False),
-    'Average Size of Heat Pumps (residential) Units': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Average_Size_of_Heat_Pumps_residential_Units.csv"),
-            use_weight=False),
-    'Average Size of Heat Pumps (commercial) Units': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Average_Size_of_Heat_Pumps_commercial_Units.csv"),
-            use_weight=False),
-    'Average Size of Conventional Technologies': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Average_Size_of_Conventional_Technologies.csv"),
-            use_weight=True),
-    'Learning Rate': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Learning_Rate.csv"),
-            use_weight=False),
-    'Discount Rate': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Discount_Rate.csv"),
-            use_weight=True),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Installation Units",
diff --git a/solution/heatpumps/vma_data/vma_sources.json b/solution/heatpumps/vma_data/vma_sources.json
new file mode 100644
index 000000000..54a45b917
--- /dev/null
+++ b/solution/heatpumps/vma_data/vma_sources.json
@@ -0,0 +1,118 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh (th)"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Installation Units"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Installation Units"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh (th)/Installation Units"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh (th)/Installation Units"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh (th)/Installation Units/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh (th)/Installation Units/year"
+  },
+  "CONVENTIONAL Fixed Operating Cost (FOM)": {
+    "title": "CONVENTIONAL Fixed Operating Cost (FOM)",
+    "filename": "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv",
+    "use_weight": true,
+    "units": "US2014$/Installation Units"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "use_weight": true,
+    "units": "US2014$/Installation Units"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/TWh (th)"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/TWh (th)"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TJ/TWh (th)"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "TAM Share from Space Heating": {
+    "title": "TAM Share from Space Heating",
+    "filename": "TAM_Share_from_Space_Heating.csv",
+    "stat_correction": true
+  },
+  "High Efficiency Heat Pump Coefficient of Performance": {
+    "title": "High Efficiency Heat Pump Coefficient of Performance",
+    "filename": "High_Efficiency_Heat_Pump_Coefficient_of_Performance.csv",
+    "stat_correction": true
+  },
+  "Average Size of Heat Pumps (residential) Units": {
+    "title": "Average Size of Heat Pumps (residential) Units",
+    "filename": "Average_Size_of_Heat_Pumps_residential_Units.csv",
+    "stat_correction": true,
+    "units": "kW"
+  },
+  "Average Size of Heat Pumps (commercial) Units": {
+    "title": "Average Size of Heat Pumps (commercial) Units",
+    "filename": "Average_Size_of_Heat_Pumps_commercial_Units.csv",
+    "stat_correction": true,
+    "units": "kW"
+  },
+  "Average Size of Conventional Technologies": {
+    "title": "Average Size of Conventional Technologies",
+    "filename": "Average_Size_of_Conventional_Technologies.csv",
+    "use_weight": true,
+    "units": "kW"
+  },
+  "Learning Rate": {
+    "title": "Learning Rate",
+    "filename": "Learning_Rate.csv",
+    "stat_correction": true
+  },
+  "Discount Rate": {
+    "title": "Discount Rate",
+    "filename": "Discount_Rate.csv",
+    "use_weight": true
+  }
+}
\ No newline at end of file
diff --git a/solution/hfc_replacement/__init__.py b/solution/hfc_replacement/__init__.py
index 968be30c7..c9683647d 100644
--- a/solution/hfc_replacement/__init__.py
+++ b/solution/hfc_replacement/__init__.py
@@ -26,59 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "kton HFC replaced",
diff --git a/solution/hfc_replacement/vma_data/vma_sources.json b/solution/hfc_replacement/vma_data/vma_sources.json
new file mode 100644
index 000000000..0dd3a4522
--- /dev/null
+++ b/solution/hfc_replacement/vma_data/vma_sources.json
@@ -0,0 +1,14 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "kton refrigerant"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/kton refrigerant"
+  }
+}
\ No newline at end of file
diff --git a/solution/highspeedrail/__init__.py b/solution/highspeedrail/__init__.py
index 5c077a802..a11c4ac30 100644
--- a/solution/highspeedrail/__init__.py
+++ b/solution/highspeedrail/__init__.py
@@ -26,85 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'Discount Rate - Governments': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Governments.csv"),
-        use_weight=True),
-    'Airport Operating Costs': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Airport_Operating_Costs.csv"),
-        use_weight=False),
-    'Airline Operating Costs': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Airline_Operating_Costs.csv"),
-        use_weight=False),
-    'HSR Rolling Stock Running Costs- Europe': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "HSR_Rolling_Stock_Running_Costs_Europe.csv"),
-        use_weight=False),
-    'HSR Infrastructure Cost - Europe': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "HSR_Infrastructure_Cost_Europe.csv"),
-        use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "km of HSR track equivalent",
diff --git a/solution/highspeedrail/vma_data/vma_sources.json b/solution/highspeedrail/vma_data/vma_sources.json
new file mode 100644
index 000000000..20e2b81fe
--- /dev/null
+++ b/solution/highspeedrail/vma_data/vma_sources.json
@@ -0,0 +1,109 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/HSR: km of track OR Air: Available Seat-km (ASK)"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/HSR: km of track OR Air: Available Seat-km (ASK)"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/HSR: km of track OR Air: Available Seat-km (ASK)"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/HSR: km of track OR Air: Available Seat-km (ASK)/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "billion passenger-km/HSR: km of track OR Air: Available Seat-km (ASK)/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/billion passenger-km"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/billion passenger-km"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/billion passenger-km"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/billion passenger-km"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/billion passenger-km"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/billion passenger-km"
+  },
+  "Discount Rate - Governments": {
+    "title": "Discount Rate - Governments",
+    "filename": "Discount_Rate_Governments.csv",
+    "use_weight": true
+  },
+  "Airport Operating Costs": {
+    "title": "Airport Operating Costs",
+    "filename": "Airport_Operating_Costs.csv",
+    "stat_correction": true,
+    "units": "US2014$/billion passenger-km"
+  },
+  "Airline Operating Costs": {
+    "title": "Airline Operating Costs",
+    "filename": "Airline_Operating_Costs.csv",
+    "stat_correction": true,
+    "units": "US2014$/billion passenger-km"
+  },
+  "HSR Rolling Stock Running Costs- Europe": {
+    "title": "HSR Rolling Stock Running Costs- Europe",
+    "filename": "HSR_Rolling_Stock_Running_Costs_Europe.csv",
+    "stat_correction": true,
+    "units": "US2014$/billion passenger-km"
+  },
+  "HSR Infrastructure Cost - Europe": {
+    "title": "HSR Infrastructure Cost - Europe",
+    "filename": "HSR_Infrastructure_Cost_Europe.csv",
+    "stat_correction": true,
+    "units": "US2014$/billion passenger-km"
+  }
+}
\ No newline at end of file
diff --git a/solution/hybridcars/__init__.py b/solution/hybridcars/__init__.py
index bfdd8b2b9..1324c58e0 100644
--- a/solution/hybridcars/__init__.py
+++ b/solution/hybridcars/__init__.py
@@ -28,96 +28,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'Urban Travel TAM - Current': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Urban_Travel_TAM_Current.csv"),
-        use_weight=False),
-    'Urban Travel TAM - Projected': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Urban_Travel_TAM_Projected.csv"),
-        use_weight=False),
-    'Interurban Travel TAM - Current': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Interurban_Travel_TAM_Current.csv"),
-        use_weight=False),
-    'Interurban Travel TAM - Projected': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Interurban_Travel_TAM_Projected.csv"),
-        use_weight=False),
-    'Average Global Car Occupancy - Conventional': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Global_Car_Occupancy_Conventional.csv"),
-        use_weight=False),
-    'Discount Rate: Households': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Households.csv"),
-        use_weight=False),
-    'Learning Rate': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_Rate.csv"),
-        use_weight=False),
-    'Average Global Car Occupancy - Solution': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Global_Car_Occupancy_Solution.csv"),
-        use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Car",
diff --git a/solution/hybridcars/vma_data/vma_sources.json b/solution/hybridcars/vma_data/vma_sources.json
new file mode 100644
index 000000000..c6eec2125
--- /dev/null
+++ b/solution/hybridcars/vma_data/vma_sources.json
@@ -0,0 +1,132 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "passenger-km"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Car"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Car"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "passenger-km/Car"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "passenger-km/Car"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "passenger-km/Car/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "passenger-km/Car/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/passenger-km"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/passenger-km"
+  },
+  "CONVENTIONAL Fixed Operating Cost (FOM)": {
+    "title": "CONVENTIONAL Fixed Operating Cost (FOM)",
+    "filename": "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US2014$/year/Car"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US2014$/year/Car"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/passenger-km"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Car"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Car"
+  },
+  "Urban Travel TAM - Current": {
+    "title": "Urban Travel TAM - Current",
+    "filename": "Urban_Travel_TAM_Current.csv",
+    "stat_correction": true
+  },
+  "Urban Travel TAM - Projected": {
+    "title": "Urban Travel TAM - Projected",
+    "filename": "Urban_Travel_TAM_Projected.csv",
+    "stat_correction": true
+  },
+  "Interurban Travel TAM - Current": {
+    "title": "Interurban Travel TAM - Current",
+    "filename": "Interurban_Travel_TAM_Current.csv",
+    "stat_correction": true
+  },
+  "Interurban Travel TAM - Projected": {
+    "title": "Interurban Travel TAM - Projected",
+    "filename": "Interurban_Travel_TAM_Projected.csv",
+    "stat_correction": true
+  },
+  "Average Global Car Occupancy - Conventional": {
+    "title": "Average Global Car Occupancy - Conventional",
+    "filename": "Average_Global_Car_Occupancy_Conventional.csv",
+    "stat_correction": true
+  },
+  "Discount Rate: Households": {
+    "title": "Discount Rate: Households",
+    "filename": "Discount_Rate_Households.csv",
+    "stat_correction": true
+  },
+  "Learning Rate": {
+    "title": "Learning Rate",
+    "filename": "Learning_Rate.csv",
+    "stat_correction": true
+  },
+  "Average Global Car Occupancy - Solution": {
+    "title": "Average Global Car Occupancy - Solution",
+    "filename": "Average_Global_Car_Occupancy_Solution.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/improvedcookstoves/__init__.py b/solution/improvedcookstoves/__init__.py
index 718545431..5bf1449ed 100644
--- a/solution/improvedcookstoves/__init__.py
+++ b/solution/improvedcookstoves/__init__.py
@@ -26,91 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=True),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=True),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-            use_weight=True),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=True),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    't CO2 eq per Metric ton of fuel': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "t_CO2_eq_per_Metric_ton_of_fuel.csv"),
-            use_weight=True),
-    'PM2.5 for traditional stove': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "PM2_5_for_traditional_stove.csv"),
-            use_weight=True),
-    'PM 2.5 for improved stove': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "PM_2_5_for_improved_stove.csv"),
-            use_weight=False),
-    'Black carbon GWP': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Black_carbon_GWP.csv"),
-            use_weight=False),
-    'Kerosene (Heating Oil) Spot Price': vma.VMA(
-            filename=DATADIR.joinpath(*('energy', 'vma_Kerosene_Heating_Oil_Spot_Price.csv')),
-            use_weight=False),
-    'Adoption Data Low Sensitivity around Mean': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Adoption_Data_Low_Sensitivity_around_Mean.csv"),
-            use_weight=False),
-    'Adoption Data High Sensitivity around Mean': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Adoption_Data_High_Sensitivity_around_Mean.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Number of ICS",
diff --git a/solution/improvedcookstoves/vma_data/vma_sources.json b/solution/improvedcookstoves/vma_data/vma_sources.json
new file mode 100644
index 000000000..ee1539571
--- /dev/null
+++ b/solution/improvedcookstoves/vma_data/vma_sources.json
@@ -0,0 +1,114 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh thermal"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Number of ICS"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Number of ICS"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "use_weight": true,
+    "units": "TWh thermal/Number of ICS"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh thermal/Number of ICS"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh thermal/Number of ICS/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh thermal/Number of ICS/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/TWh thermal"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/TWh thermal"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "TJ/TWh thermal"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "use_weight": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/TWh thermal"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/TWh thermal"
+  },
+  "t CO2 eq per Metric ton of fuel": {
+    "title": "t CO2 eq per Metric ton of fuel",
+    "filename": "t_CO2_eq_per_Metric_ton_of_fuel.csv",
+    "use_weight": true,
+    "units": "t CO2eq/ton fuel"
+  },
+  "PM2.5 for traditional stove": {
+    "title": "PM2.5 for traditional stove",
+    "filename": "PM2_5_for_traditional_stove.csv",
+    "use_weight": true,
+    "units": "ton/Twhth"
+  },
+  "PM 2.5 for improved stove": {
+    "title": "PM 2.5 for improved stove",
+    "filename": "PM_2_5_for_improved_stove.csv",
+    "stat_correction": true,
+    "units": "ton/Twhth"
+  },
+  "Black carbon GWP": {
+    "title": "Black carbon GWP",
+    "filename": "Black_carbon_GWP.csv",
+    "stat_correction": true,
+    "units": "CO2 eq"
+  },
+  "Adoption Data Low Sensitivity around Mean": {
+    "title": "Adoption Data Low Sensitivity around Mean",
+    "filename": "Adoption_Data_Low_Sensitivity_around_Mean.csv",
+    "stat_correction": true
+  },
+  "Adoption Data High Sensitivity around Mean": {
+    "title": "Adoption Data High Sensitivity around Mean",
+    "filename": "Adoption_Data_High_Sensitivity_around_Mean.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/improvedrice/__init__.py b/solution/improvedrice/__init__.py
index 77f770a65..d812464e6 100644
--- a/solution/improvedrice/__init__.py
+++ b/solution/improvedrice/__init__.py
@@ -28,64 +28,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_from_CONVENTIONAL_Practice.csv"),
-        use_weight=True),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_N2O_CO2_eq_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CH4_CO2_eq_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per  Implementation Unit - SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
@@ -371,4 +314,3 @@ def __init__(self, scen=None):
             annual_land_area_harvested=self.ua.soln_pds_annual_land_area_harvested(),
             regime_distribution=self.ae.get_land_distribution(),
             regimes=dd.THERMAL_MOISTURE_REGIMES8)
-
diff --git a/solution/improvedrice/vma_data/vma_sources.json b/solution/improvedrice/vma_data/vma_sources.json
new file mode 100644
index 000000000..bed49e967
--- /dev/null
+++ b/solution/improvedrice/vma_data/vma_sources.json
@@ -0,0 +1,56 @@
+{
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Yield from CONVENTIONAL Practice": {
+    "title": "Yield from CONVENTIONAL Practice",
+    "filename": "Yield_from_CONVENTIONAL_Practice.csv",
+    "use_weight": true,
+    "units": "t/ha/yr"
+  },
+  "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)": {
+    "title": "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)",
+    "filename": "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "t N2O-CO2-eq Reduced per Land Unit": {
+    "title": "t N2O-CO2-eq Reduced per Land Unit",
+    "filename": "t_N2O_CO2_eq_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t N2O-CO2-eq/ha/year"
+  },
+  "t CH4-CO2-eq Reduced per Land Unit": {
+    "title": "t CH4-CO2-eq Reduced per Land Unit",
+    "filename": "t_CH4_CO2_eq_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CH4-CO2-eq/ha/year"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  }
+}
\ No newline at end of file
diff --git a/solution/indigenouspeoplesland/__init__.py b/solution/indigenouspeoplesland/__init__.py
index 0d764f5d7..145322942 100644
--- a/solution/indigenouspeoplesland/__init__.py
+++ b/solution/indigenouspeoplesland/__init__.py
@@ -27,65 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Electricty Used DEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Energy Efficiency Factor UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'ALTERNATIVE APPROACH Annual Energy Used UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed on DEGRADED Land': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor for UNDEGRADED Land': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2-eq Emissions DEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2-eq Emissions UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Growth Rate of Land Degradation': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Growth_Rate_of_Land_Degradation.csv"),
-        use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Disturbance_Rate.csv"),
-        use_weight=False),
-    't C storage in Protected Landtype': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_C_storage_in_Protected_Landtype.csv"),
-        use_weight=False),
-    'Global Multipler for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Tropical Multipler for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Temperate Multiplier for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/indigenouspeoplesland/vma_data/vma_sources.json b/solution/indigenouspeoplesland/vma_data/vma_sources.json
new file mode 100644
index 000000000..f19183c0a
--- /dev/null
+++ b/solution/indigenouspeoplesland/vma_data/vma_sources.json
@@ -0,0 +1,38 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Growth Rate of Land Degradation": {
+    "title": "Growth Rate of Land Degradation",
+    "filename": "Growth_Rate_of_Land_Degradation.csv",
+    "stat_correction": true,
+    "units": "% Annually"
+  },
+  "Disturbance Rate": {
+    "title": "Disturbance Rate",
+    "filename": "Disturbance_Rate.csv",
+    "stat_correction": true,
+    "units": "% Annually"
+  },
+  "t C storage in Protected Landtype": {
+    "title": "t C storage in Protected Landtype",
+    "filename": "t_C_storage_in_Protected_Landtype.csv",
+    "stat_correction": true,
+    "units": "t C/ha"
+  }
+}
\ No newline at end of file
diff --git a/solution/instreamhydro/__init__.py b/solution/instreamhydro/__init__.py
index 368588250..c586a2cfc 100644
--- a/solution/instreamhydro/__init__.py
+++ b/solution/instreamhydro/__init__.py
@@ -27,88 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Coal_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Learning Rate': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_Rate.csv"),
-        use_weight=False),
-    'NPV Discount Rate - Government / Public Agency / State': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "NPV_Discount_Rate_Government_Public_Agency_State.csv"),
-        use_weight=True),
-    'Variable30': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/instreamhydro/vma_data/vma_sources.json b/solution/instreamhydro/vma_data/vma_sources.json
new file mode 100644
index 000000000..3a3deadd5
--- /dev/null
+++ b/solution/instreamhydro/vma_data/vma_sources.json
@@ -0,0 +1,62 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "Learning Rate": {
+    "title": "Learning Rate",
+    "filename": "Learning_Rate.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "NPV Discount Rate - Government / Public Agency / State": {
+    "title": "NPV Discount Rate - Government / Public Agency / State",
+    "filename": "NPV_Discount_Rate_Government_Public_Agency_State.csv",
+    "use_weight": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/insulation/__init__.py b/solution/insulation/__init__.py
index 3f10dd5b1..5069823dc 100644
--- a/solution/insulation/__init__.py
+++ b/solution/insulation/__init__.py
@@ -26,98 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-        'Current Adoption': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-                        use_weight=False),
-        'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-                        use_weight=False),
-        'SOLUTION First Cost per Implementation Unit': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-                        use_weight=False),
-        'CONVENTIONAL Lifetime Capacity': vma.VMA(
-                        filename=None, use_weight=False),
-        'SOLUTION Lifetime Capacity': vma.VMA(
-                        filename=None, use_weight=False),
-        'CONVENTIONAL Average Annual Use': vma.VMA(
-                        filename=None, use_weight=False),
-        'SOLUTION Average Annual Use': vma.VMA(
-                        filename=None, use_weight=False),
-        'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-                        filename=None, use_weight=False),
-        'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-                        filename=None, use_weight=False),
-        'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-                        filename=None, use_weight=False),
-        'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-                        filename=None, use_weight=False),
-        'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-                        use_weight=False),
-        'SOLUTION Energy Efficiency Factor': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "SOLUTION_Energy_Efficiency_Factor.csv"),
-                        use_weight=False),
-        'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-                        filename=None, use_weight=False),
-        'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-                        use_weight=False),
-        'SOLUTION Fuel Efficiency Factor': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-                        use_weight=False),
-        'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-                        filename=None, use_weight=False),
-        'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-                        filename=None, use_weight=False),
-        'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-                        filename=None, use_weight=False),
-        'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-                        filename=None, use_weight=False),
-        'CH4-CO2eq Tons Reduced': vma.VMA(
-                        filename=None, use_weight=False),
-        'N2O-CO2eq Tons Reduced': vma.VMA(
-                        filename=None, use_weight=False),
-        'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-                        filename=None, use_weight=False),
-        'SOLUTION Revenue per Functional Unit': vma.VMA(
-                        filename=None, use_weight=False),
-        'Threshold  Avg. Annual Temperature Gradient of Cooling': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Threshold_Avg_Annual_Temperature_Gradient_of_Cooling.csv"),
-                        use_weight=False),
-        'Average Commercial Building Wall Height': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Average_Commercial_Building_Wall_Height.csv"),
-                        use_weight=False),
-        'Average Residential Building Wall Height': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Average_Residential_Building_Wall_Height.csv"),
-                        use_weight=False),
-        'Average Commercial Building Floor Count': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Average_Commercial_Building_Floor_Count.csv"),
-                        use_weight=False),
-        'Average Residential Building Floor Count': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Average_Residential_Building_Floor_Count.csv"),
-                        use_weight=False),
-        'Individual Commercial:Residential Building Floor Area Ratio': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Individual_Commercial_Residential_Building_Floor_Area_Ratio.csv"),
-                        use_weight=False),
-        'Conventional Insulation R-value for Cold Latitudes': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Conventional_Insulation_R_value_for_Cold_Latitudes.csv"),
-                        use_weight=False),
-        'Solution Insulation R-value for Cold Latitudes': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Solution_Insulation_R_value_for_Cold_Latitudes.csv"),
-                        use_weight=False),
-        'Surface Area per Floor Area Ratio': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Surface_Area_per_Floor_Area_Ratio.csv"),
-                        use_weight=False),
-        'Discount Rate - Households': vma.VMA(
-                        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Households.csv"),
-                        use_weight=False),
-        # Denise 9/2021: Added VMAs from new model to enable integration calcs
-        'Envelope Surface Area per Floor Area Ratio': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Envelope_Surface_Area_per_Floor_Area_Ratio.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
         "implementation unit": "Mm²",
@@ -277,4 +186,3 @@ def adoption_as_material_mass(self):
 
             # NOTE: the "diff" leaves the first row empty, which matches the Excel, but seems wrong.
             return (self.ht.soln_pds_funits_adopted()['World'] * netfactor).diff()
-
diff --git a/solution/insulation/vma_data/vma_sources.json b/solution/insulation/vma_data/vma_sources.json
new file mode 100644
index 000000000..4548080f4
--- /dev/null
+++ b/solution/insulation/vma_data/vma_sources.json
@@ -0,0 +1,108 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Million m2 of Comm.+Resid. Floor Area Equiv. for Cold Climates"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Million m2 of Comm.+Resid. Floor Area Equiv. for Cold Climates"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Million m2 of Comm.+Resid. Floor Area Equiv. for Cold Climates"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/Million m2 of Comm.+Resid. Floor Area Equiv. for Cold Climates"
+  },
+  "SOLUTION Energy Efficiency Factor": {
+    "title": "SOLUTION Energy Efficiency Factor",
+    "filename": "SOLUTION_Energy_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TJ/Million m2 of Comm.+Resid. Floor Area Equiv. for Cold Climates"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Threshold  Avg. Annual Temperature Gradient of Cooling": {
+    "title": "Threshold  Avg. Annual Temperature Gradient of Cooling",
+    "filename": "Threshold_Avg_Annual_Temperature_Gradient_of_Cooling.csv",
+    "stat_correction": true,
+    "units": "Degrees C or Kelvin"
+  },
+  "Average Commercial Building Wall Height": {
+    "title": "Average Commercial Building Wall Height",
+    "filename": "Average_Commercial_Building_Wall_Height.csv",
+    "stat_correction": true,
+    "units": "meter"
+  },
+  "Average Residential Building Wall Height": {
+    "title": "Average Residential Building Wall Height",
+    "filename": "Average_Residential_Building_Wall_Height.csv",
+    "stat_correction": true,
+    "units": "meter"
+  },
+  "Average Commercial Building Floor Count": {
+    "title": "Average Commercial Building Floor Count",
+    "filename": "Average_Commercial_Building_Floor_Count.csv",
+    "stat_correction": true,
+    "units": "floors"
+  },
+  "Average Residential Building Floor Count": {
+    "title": "Average Residential Building Floor Count",
+    "filename": "Average_Residential_Building_Floor_Count.csv",
+    "stat_correction": true,
+    "units": "floors"
+  },
+  "Individual Commercial:Residential Building Floor Area Ratio": {
+    "title": "Individual Commercial:Residential Building Floor Area Ratio",
+    "filename": "Individual_Commercial_Residential_Building_Floor_Area_Ratio.csv",
+    "stat_correction": true,
+    "units": "(none)"
+  },
+  "Conventional Insulation R-value for Cold Latitudes": {
+    "title": "Conventional Insulation R-value for Cold Latitudes",
+    "filename": "Conventional_Insulation_R_value_for_Cold_Latitudes.csv",
+    "stat_correction": true,
+    "units": "K.m2/W"
+  },
+  "Solution Insulation R-value for Cold Latitudes": {
+    "title": "Solution Insulation R-value for Cold Latitudes",
+    "filename": "Solution_Insulation_R_value_for_Cold_Latitudes.csv",
+    "stat_correction": true,
+    "units": "K.m2/W"
+  },
+  "Surface Area per Floor Area Ratio": {
+    "title": "Surface Area per Floor Area Ratio",
+    "filename": "Surface_Area_per_Floor_Area_Ratio.csv",
+    "stat_correction": true,
+    "units": "(none)"
+  },
+  "Discount Rate - Households": {
+    "title": "Discount Rate - Households",
+    "filename": "Discount_Rate_Households.csv",
+    "stat_correction": true
+  },
+  "Envelope Surface Area per Floor Area Ratio": {
+    "title": "Envelope Surface Area per Floor Area Ratio",
+    "filename": "Envelope_Surface_Area_per_Floor_Area_Ratio.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/irrigationefficiency/__init__.py b/solution/irrigationefficiency/__init__.py
index 67b9c49a4..e7c456c29 100644
--- a/solution/irrigationefficiency/__init__.py
+++ b/solution/irrigationefficiency/__init__.py
@@ -27,80 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-            use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-            use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-            filename=None, use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-            filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-            filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Electricty_Consumed_per_CONVENTIONAL_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Total_Energy_Used_per_SOLUTION_functional_unit.csv"),
-            use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-            filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-            filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-            filename=None, use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-            filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-            filename=None, use_weight=False),
-    'Total Irrigated Area': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Total_Irrigated_Area.csv"),
-            use_weight=False),
-    'Conventional Irrigation Efficiency': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Conventional_Irrigation_Efficiency.csv"),
-            use_weight=False),
-    'Sprinkler Irrigation efficiency': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Sprinkler_Irrigation_efficiency.csv"),
-            use_weight=False),
-    'Drip Irrigation efficiency': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Drip_Irrigation_efficiency.csv"),
-            use_weight=False),
-    'Energy needed to irrigate 1 ha (kWh/ha) Sprinkler': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Energy_needed_to_irrigate_1_ha_kWh_ha_Sprinkler.csv"),
-            use_weight=False),
-    'Energy needed to irrigate 1 ha (kWh/ha) Drip': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Energy_needed_to_irrigate_1_ha_kWh_ha_Drip.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/irrigationefficiency/vma_data/vma_sources.json b/solution/irrigationefficiency/vma_data/vma_sources.json
new file mode 100644
index 000000000..e228e8553
--- /dev/null
+++ b/solution/irrigationefficiency/vma_data/vma_sources.json
@@ -0,0 +1,76 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Electricty Consumed per CONVENTIONAL Functional Unit": {
+    "title": "Electricty Consumed per CONVENTIONAL Functional Unit",
+    "filename": "Electricty_Consumed_per_CONVENTIONAL_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/ha/year"
+  },
+  "Total Energy Used per SOLUTION functional unit": {
+    "title": "Total Energy Used per SOLUTION functional unit",
+    "filename": "Total_Energy_Used_per_SOLUTION_functional_unit.csv",
+    "stat_correction": true,
+    "units": "TWh/yr"
+  },
+  "Total Irrigated Area": {
+    "title": "Total Irrigated Area",
+    "filename": "Total_Irrigated_Area.csv",
+    "stat_correction": true
+  },
+  "Conventional Irrigation Efficiency": {
+    "title": "Conventional Irrigation Efficiency",
+    "filename": "Conventional_Irrigation_Efficiency.csv",
+    "stat_correction": true
+  },
+  "Sprinkler Irrigation efficiency": {
+    "title": "Sprinkler Irrigation efficiency",
+    "filename": "Sprinkler_Irrigation_efficiency.csv",
+    "stat_correction": true
+  },
+  "Drip Irrigation efficiency": {
+    "title": "Drip Irrigation efficiency",
+    "filename": "Drip_Irrigation_efficiency.csv",
+    "stat_correction": true
+  },
+  "Energy needed to irrigate 1 ha (kWh/ha) Sprinkler": {
+    "title": "Energy needed to irrigate 1 ha (kWh/ha) Sprinkler",
+    "filename": "Energy_needed_to_irrigate_1_ha_kWh_ha_Sprinkler.csv",
+    "stat_correction": true,
+    "units": "KWH/ha"
+  },
+  "Energy needed to irrigate 1 ha (kWh/ha) Drip": {
+    "title": "Energy needed to irrigate 1 ha (kWh/ha) Drip",
+    "filename": "Energy_needed_to_irrigate_1_ha_kWh_ha_Drip.csv",
+    "stat_correction": true,
+    "units": "KWH/ha"
+  }
+}
\ No newline at end of file
diff --git a/solution/landfillmethane/__init__.py b/solution/landfillmethane/__init__.py
index 187688b03..17fe3a01f 100644
--- a/solution/landfillmethane/__init__.py
+++ b/solution/landfillmethane/__init__.py
@@ -27,93 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CH4_CO2eq_Tons_Reduced.csv"),
-        use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Coal_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'tCO2 from Landfill Gas Burning': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "tCO2_from_Landfill_Gas_Burning.csv"),
-        use_weight=False),
-    'tCH4-CO2-eq from Landfill Gas Burning': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "tCH4_CO2_eq_from_Landfill_Gas_Burning.csv"),
-        use_weight=False),
-    'tN2O-CO2-eq from Landfill Gas Burning': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "tN2O_CO2_eq_from_Landfill_Gas_Burning.csv"),
-        use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/landfillmethane/vma_data/vma_sources.json b/solution/landfillmethane/vma_data/vma_sources.json
new file mode 100644
index 000000000..fc2b75794
--- /dev/null
+++ b/solution/landfillmethane/vma_data/vma_sources.json
@@ -0,0 +1,74 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "CH4-CO2eq Tons Reduced": {
+    "title": "CH4-CO2eq Tons Reduced",
+    "filename": "CH4_CO2eq_Tons_Reduced.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "tCO2 from Landfill Gas Burning": {
+    "title": "tCO2 from Landfill Gas Burning",
+    "filename": "tCO2_from_Landfill_Gas_Burning.csv",
+    "stat_correction": true,
+    "units": "tCO2/TWh"
+  },
+  "tCH4-CO2-eq from Landfill Gas Burning": {
+    "title": "tCH4-CO2-eq from Landfill Gas Burning",
+    "filename": "tCH4_CO2_eq_from_Landfill_Gas_Burning.csv",
+    "stat_correction": true,
+    "units": "tCO2-eq/TWh"
+  },
+  "tN2O-CO2-eq from Landfill Gas Burning": {
+    "title": "tN2O-CO2-eq from Landfill Gas Burning",
+    "filename": "tN2O_CO2_eq_from_Landfill_Gas_Burning.csv",
+    "stat_correction": true,
+    "units": "tCO2-eq/TWh"
+  }
+}
\ No newline at end of file
diff --git a/solution/leds_commercial/__init__.py b/solution/leds_commercial/__init__.py
index a3df8cfbc..8091108e0 100644
--- a/solution/leds_commercial/__init__.py
+++ b/solution/leds_commercial/__init__.py
@@ -26,70 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Energy_Efficiency_Factor.csv"),
-            use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-            use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Petalumen (Plm)",
diff --git a/solution/leds_commercial/vma_data/vma_sources.json b/solution/leds_commercial/vma_data/vma_sources.json
new file mode 100644
index 000000000..27ae50b3e
--- /dev/null
+++ b/solution/leds_commercial/vma_data/vma_sources.json
@@ -0,0 +1,80 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Petalumen hours (Plmh)"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/kilo lumen"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/kilo lumen"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "use_weight": true,
+    "units": "hours"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "hours"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Hours"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Hours"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/kilo-lumen-hr"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/kilo-lumen-hr"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "TWh/Petalumen hours (Plmh)"
+  },
+  "SOLUTION Energy Efficiency Factor": {
+    "title": "SOLUTION Energy Efficiency Factor",
+    "filename": "SOLUTION_Energy_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Petalumen (Plm)"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Petalumen (Plm)"
+  }
+}
\ No newline at end of file
diff --git a/solution/leds_residential/__init__.py b/solution/leds_residential/__init__.py
index 6c218260a..6b1509e90 100644
--- a/solution/leds_residential/__init__.py
+++ b/solution/leds_residential/__init__.py
@@ -26,103 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-            use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Future estimates of First cost - LED': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Future_estimates_of_First_cost_LED.csv"),
-            use_weight=False),
-    'LED Lamp Efficacy': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "LED_Lamp_Efficacy.csv"),
-            use_weight=False),
-    'Luminous Flux - Incandescent Lamp': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Luminous_Flux_Incandescent_Lamp.csv"),
-            use_weight=False),
-    'Luminous Flux - Halogen Lamp': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Luminous_Flux_Halogen_Lamp.csv"),
-            use_weight=False),
-    'Luminous Flux - LFL (Linear Fluorescent)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Luminous_Flux_LFL_Linear_Fluorescent.csv"),
-            use_weight=False),
-    'Luminous Flux - CFL (Compact Fluorescent)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Luminous_Flux_CFL_Compact_Fluorescent.csv"),
-            use_weight=False),
-    'Luminous Efficacy - Incandescent Lamp': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Luminous_Efficacy_Incandescent_Lamp.csv"),
-            use_weight=False),
-    'Luminous Efficacy - Halogen Lamp': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Luminous_Efficacy_Halogen_Lamp.csv"),
-            use_weight=False),
-    'Luminous Efficacy - LFL (Linear Fluorescent)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Luminous_Efficacy_LFL_Linear_Fluorescent.csv"),
-            use_weight=False),
-    'Luminous Efficacy - CFL (Compact Fluorescent)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Luminous_Efficacy_CFL_Compact_Fluorescent.csv"),
-            use_weight=False),
-    'LED Luminous Flux': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "LED_Luminous_Flux.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Petalumens (Plm)",
diff --git a/solution/leds_residential/vma_data/vma_sources.json b/solution/leds_residential/vma_data/vma_sources.json
new file mode 100644
index 000000000..689e4bf4b
--- /dev/null
+++ b/solution/leds_residential/vma_data/vma_sources.json
@@ -0,0 +1,136 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Petalumen hours (Plmh)"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/kilo-lumen"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/kilo-lumen"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "use_weight": true,
+    "units": "Petalumen hours (Plmh)/Petalumens (Plm)"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Petalumen hours (Plmh)/Petalumens (Plm)"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Petalumen hours (Plmh)/Petalumens (Plm)/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Petalumen hours (Plmh)/Petalumens (Plm)/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/kilo-lumen-hr"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/kilo-lumen-hr"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "TWh/Petalumen hours (Plmh)"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/Petalumen hours (Plmh)"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Petalumens (Plm)"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Petalumens (Plm)"
+  },
+  "Future estimates of First cost - LED": {
+    "title": "Future estimates of First cost - LED",
+    "filename": "Future_estimates_of_First_cost_LED.csv",
+    "stat_correction": true,
+    "units": "USD/petalumen"
+  },
+  "LED Lamp Efficacy": {
+    "title": "LED Lamp Efficacy",
+    "filename": "LED_Lamp_Efficacy.csv",
+    "stat_correction": true
+  },
+  "Luminous Flux - Incandescent Lamp": {
+    "title": "Luminous Flux - Incandescent Lamp",
+    "filename": "Luminous_Flux_Incandescent_Lamp.csv",
+    "stat_correction": true
+  },
+  "Luminous Flux - Halogen Lamp": {
+    "title": "Luminous Flux - Halogen Lamp",
+    "filename": "Luminous_Flux_Halogen_Lamp.csv",
+    "stat_correction": true
+  },
+  "Luminous Flux - LFL (Linear Fluorescent)": {
+    "title": "Luminous Flux - LFL (Linear Fluorescent)",
+    "filename": "Luminous_Flux_LFL_Linear_Fluorescent.csv",
+    "stat_correction": true
+  },
+  "Luminous Flux - CFL (Compact Fluorescent)": {
+    "title": "Luminous Flux - CFL (Compact Fluorescent)",
+    "filename": "Luminous_Flux_CFL_Compact_Fluorescent.csv",
+    "stat_correction": true
+  },
+  "Luminous Efficacy - Incandescent Lamp": {
+    "title": "Luminous Efficacy - Incandescent Lamp",
+    "filename": "Luminous_Efficacy_Incandescent_Lamp.csv",
+    "stat_correction": true
+  },
+  "Luminous Efficacy - Halogen Lamp": {
+    "title": "Luminous Efficacy - Halogen Lamp",
+    "filename": "Luminous_Efficacy_Halogen_Lamp.csv",
+    "stat_correction": true
+  },
+  "Luminous Efficacy - LFL (Linear Fluorescent)": {
+    "title": "Luminous Efficacy - LFL (Linear Fluorescent)",
+    "filename": "Luminous_Efficacy_LFL_Linear_Fluorescent.csv",
+    "stat_correction": true
+  },
+  "Luminous Efficacy - CFL (Compact Fluorescent)": {
+    "title": "Luminous Efficacy - CFL (Compact Fluorescent)",
+    "filename": "Luminous_Efficacy_CFL_Compact_Fluorescent.csv",
+    "stat_correction": true
+  },
+  "LED Luminous Flux": {
+    "title": "LED Luminous Flux",
+    "filename": "LED_Luminous_Flux.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/managedgrazing/__init__.py b/solution/managedgrazing/__init__.py
index 402d92924..0a560c296 100644
--- a/solution/managedgrazing/__init__.py
+++ b/solution/managedgrazing/__init__.py
@@ -27,71 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_from_CONVENTIONAL_Practice.csv"),
-        use_weight=True),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv"),
-        use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CH4_CO2_eq_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'Current Adoption of Holistic Grazing': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption_of_Holistic_Grazing.csv"),
-        use_weight=False),
-    'All other current adoption estimates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "All_other_current_adoption_estimates.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/managedgrazing/vma_data/vma_sources.json b/solution/managedgrazing/vma_data/vma_sources.json
new file mode 100644
index 000000000..53077b44e
--- /dev/null
+++ b/solution/managedgrazing/vma_data/vma_sources.json
@@ -0,0 +1,74 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Yield from CONVENTIONAL Practice": {
+    "title": "Yield from CONVENTIONAL Practice",
+    "filename": "Yield_from_CONVENTIONAL_Practice.csv",
+    "use_weight": true,
+    "units": "DM tons fodder/ha/yr"
+  },
+  "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)": {
+    "title": "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)",
+    "filename": "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "t CH4-CO2-eq Reduced per Land Unit": {
+    "title": "t CH4-CO2-eq Reduced per Land Unit",
+    "filename": "t_CH4_CO2_eq_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CH4-CO2-eq/ha/yr"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Current Adoption of Holistic Grazing": {
+    "title": "Current Adoption of Holistic Grazing",
+    "filename": "Current_Adoption_of_Holistic_Grazing.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "All other current adoption estimates": {
+    "title": "All other current adoption estimates",
+    "filename": "All_other_current_adoption_estimates.csv",
+    "stat_correction": true,
+    "units": "Mha"
+  }
+}
\ No newline at end of file
diff --git a/solution/mangroverestoration/__init__.py b/solution/mangroverestoration/__init__.py
index 83f54ad34..d13f5f87b 100644
--- a/solution/mangroverestoration/__init__.py
+++ b/solution/mangroverestoration/__init__.py
@@ -27,67 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Electricty Used DEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Energy Efficiency Factor UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'ALTERNATIVE APPROACH Annual Energy Used UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed on DEGRADED Land': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor for UNDEGRADED Land': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2-eq Emissions DEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2-eq Emissions UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Growth Rate of Land Degradation': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Growth_Rate_of_Land_Degradation.csv"),
-        use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    't C storage in Protected Landtype': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_C_storage_in_Protected_Landtype.csv"),
-        use_weight=False),
-    'Global Multipler for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Tropical Multipler for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Temperate Multiplier for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Available Land': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Total_Available_Land.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/mangroverestoration/vma_data/vma_sources.json b/solution/mangroverestoration/vma_data/vma_sources.json
new file mode 100644
index 000000000..f5be77544
--- /dev/null
+++ b/solution/mangroverestoration/vma_data/vma_sources.json
@@ -0,0 +1,38 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "t CO2 Reduced per Land Unit": {
+    "title": "t CO2 Reduced per Land Unit",
+    "filename": "t_CO2_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2/ha/year"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Growth Rate of Land Degradation": {
+    "title": "Growth Rate of Land Degradation",
+    "filename": "Growth_Rate_of_Land_Degradation.csv",
+    "stat_correction": true,
+    "units": "% Annually"
+  },
+  "t C storage in Protected Landtype": {
+    "title": "t C storage in Protected Landtype",
+    "filename": "t_C_storage_in_Protected_Landtype.csv",
+    "stat_correction": true,
+    "units": "t C/ha"
+  },
+  "Total Available Land": {
+    "title": "Total Available Land",
+    "filename": "Total_Available_Land.csv",
+    "stat_correction": true,
+    "units": "Mha"
+  }
+}
\ No newline at end of file
diff --git a/solution/masstransit/__init__.py b/solution/masstransit/__init__.py
index 2844be06f..93fbc29ca 100644
--- a/solution/masstransit/__init__.py
+++ b/solution/masstransit/__init__.py
@@ -26,94 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Car Insurance Costs': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Car_Insurance_Costs.csv"),
-        use_weight=False),
-    'Car Purchase (First) Costs': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Car_Purchase_First_Costs.csv"),
-        use_weight=True),
-    'Car Occupancy Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Car_Occupancy_Rates.csv"),
-        use_weight=False),
-    'Car Lifetime in Vehicle-km': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Car_Lifetime_in_Vehicle_km.csv"),
-        use_weight=False),
-    'Discount Rates - Household': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rates_Household.csv"),
-        use_weight=False),
-    'Black Carbon GWP': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Black_Carbon_GWP.csv"),
-        use_weight=False),
-    'Diesel Share of Global Car Fleet': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Diesel_Share_of_Global_Car_Fleet.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Urban trip",
diff --git a/solution/masstransit/vma_data/vma_sources.json b/solution/masstransit/vma_data/vma_sources.json
new file mode 100644
index 000000000..e31a06ef6
--- /dev/null
+++ b/solution/masstransit/vma_data/vma_sources.json
@@ -0,0 +1,137 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Pkm (urban)"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Person-trip (urban)"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Pkm (urban)/Person-trip (urban)"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Pkm (urban)/Person-trip (urban)"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Pkm (urban)/Person-trip (urban)/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Pkm (urban)/Person-trip (urban)/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Pkm (urban)"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Pkm (urban)"
+  },
+  "CONVENTIONAL Fixed Operating Cost (FOM)": {
+    "title": "CONVENTIONAL Fixed Operating Cost (FOM)",
+    "filename": "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US2014$/Person-trip (urban)"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/Pkm (urban)"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/Pkm (urban)"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Pkm (urban)"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Pkm (urban)"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Pkm (urban)"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Pkm (urban)"
+  },
+  "Car Insurance Costs": {
+    "title": "Car Insurance Costs",
+    "filename": "Car_Insurance_Costs.csv",
+    "stat_correction": true,
+    "units": "US$2014/trip"
+  },
+  "Car Purchase (First) Costs": {
+    "title": "Car Purchase (First) Costs",
+    "filename": "Car_Purchase_First_Costs.csv",
+    "use_weight": true,
+    "units": "US$2014/person trip"
+  },
+  "Car Occupancy Rates": {
+    "title": "Car Occupancy Rates",
+    "filename": "Car_Occupancy_Rates.csv",
+    "stat_correction": true
+  },
+  "Car Lifetime in Vehicle-km": {
+    "title": "Car Lifetime in Vehicle-km",
+    "filename": "Car_Lifetime_in_Vehicle_km.csv",
+    "stat_correction": true
+  },
+  "Discount Rates - Household": {
+    "title": "Discount Rates - Household",
+    "filename": "Discount_Rates_Household.csv",
+    "stat_correction": true
+  },
+  "Black Carbon GWP": {
+    "title": "Black Carbon GWP",
+    "filename": "Black_Carbon_GWP.csv",
+    "stat_correction": true,
+    "units": "CO2 eq"
+  },
+  "Diesel Share of Global Car Fleet": {
+    "title": "Diesel Share of Global Car Fleet",
+    "filename": "Diesel_Share_of_Global_Car_Fleet.csv",
+    "stat_correction": true,
+    "units": "Percent"
+  }
+}
\ No newline at end of file
diff --git a/solution/methaneleak/__init__.py b/solution/methaneleak/__init__.py
index 19433b536..5bdec1b64 100644
--- a/solution/methaneleak/__init__.py
+++ b/solution/methaneleak/__init__.py
@@ -26,74 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CH4_CO2eq_Tons_Reduced.csv"),
-        use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Total abatement potential 2020  - initial value for TAM': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Total_abatement_potential_2020_initial_value_for_TAM.csv"),
-        use_weight=False),
-    'Price of natural gas': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Price_of_natural_gas.csv"),
-        use_weight=False),
-    '': vma.VMA(
-        filename=None, use_weight=False),
-    'Global warming potential of methane': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Global_warming_potential_of_methane.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Mt CH4/yr abatement capacity",
diff --git a/solution/methaneleak/vma_data/vma_sources.json b/solution/methaneleak/vma_data/vma_sources.json
new file mode 100644
index 000000000..1bef04446
--- /dev/null
+++ b/solution/methaneleak/vma_data/vma_sources.json
@@ -0,0 +1,56 @@
+{
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Mt CH4/yr abatement capacity"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Mt CH4 abated/Mt CH4/yr abatement capacity"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Mt CH4 abated"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Mt CH4 abated"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Mt CH4 abated"
+  },
+  "CH4-CO2eq Tons Reduced": {
+    "title": "CH4-CO2eq Tons Reduced",
+    "filename": "CH4_CO2eq_Tons_Reduced.csv",
+    "stat_correction": true,
+    "units": "t CH4-CO2eq per Mt CH4 abated"
+  },
+  "Total abatement potential 2020  - initial value for TAM": {
+    "title": "Total abatement potential 2020  - initial value for TAM",
+    "filename": "Total_abatement_potential_2020_initial_value_for_TAM.csv",
+    "stat_correction": true,
+    "units": "Mt CH4 in 2020"
+  },
+  "Price of natural gas": {
+    "title": "Price of natural gas",
+    "filename": "Price_of_natural_gas.csv",
+    "stat_correction": true,
+    "units": "$/mcf"
+  },
+  "Global warming potential of methane": {
+    "title": "Global warming potential of methane",
+    "filename": "Global_warming_potential_of_methane.csv",
+    "stat_correction": true,
+    "units": "t CO2e/t CH4"
+  }
+}
\ No newline at end of file
diff --git a/solution/microwind/__init__.py b/solution/microwind/__init__.py
index 87620349b..37b5bc61d 100644
--- a/solution/microwind/__init__.py
+++ b/solution/microwind/__init__.py
@@ -27,98 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Coal_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Learning rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_rates.csv"),
-        use_weight=False),
-    'Percentage of Techs On Grid': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Percentage_of_Techs_On_Grid.csv"),
-        use_weight=False),
-    'Solution (MicroWind) on total Wind current Installed Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Solution_MicroWind_on_total_Wind_current_Installed_Capacity.csv"),
-        use_weight=False),
-    'Weight for regional capacity market over time': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Weight_for_regional_capacity_market_over_time.csv"),
-        use_weight=False),
-    'Compound Annual Growth Rate (CAGR) for Historical Adoptions (%)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Compound_Annual_Growth_Rate_CAGR_for_Historical_Adoptions.csv"),
-        use_weight=False),
-    'Discount Rate: Households': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Households.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/microwind/vma_data/vma_sources.json b/solution/microwind/vma_data/vma_sources.json
new file mode 100644
index 000000000..e84ec3ec8
--- /dev/null
+++ b/solution/microwind/vma_data/vma_sources.json
@@ -0,0 +1,110 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "2005-2014 Average CONVENTIONAL Fuel Price per functional unit": {
+    "title": "2005-2014 Average CONVENTIONAL Fuel Price per functional unit",
+    "filename": "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv",
+    "use_weight": true,
+    "units": "$US2014/kWh"
+  },
+  "Coal Plant Efficiency": {
+    "title": "Coal Plant Efficiency",
+    "filename": "Coal_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Natural Gas Plant Efficiency": {
+    "title": "Natural Gas Plant Efficiency",
+    "filename": "Natural_Gas_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Learning rates": {
+    "title": "Learning rates",
+    "filename": "Learning_rates.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Percentage of Techs On Grid": {
+    "title": "Percentage of Techs On Grid",
+    "filename": "Percentage_of_Techs_On_Grid.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Solution (MicroWind) on total Wind current Installed Capacity": {
+    "title": "Solution (MicroWind) on total Wind current Installed Capacity",
+    "filename": "Solution_MicroWind_on_total_Wind_current_Installed_Capacity.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Weight for regional capacity market over time": {
+    "title": "Weight for regional capacity market over time",
+    "filename": "Weight_for_regional_capacity_market_over_time.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Compound Annual Growth Rate (CAGR) for Historical Adoptions (%)": {
+    "title": "Compound Annual Growth Rate (CAGR) for Historical Adoptions (%)",
+    "filename": "Compound_Annual_Growth_Rate_CAGR_for_Historical_Adoptions.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Discount Rate: Households": {
+    "title": "Discount Rate: Households",
+    "filename": "Discount_Rate_Households.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/multistrataagroforestry/__init__.py b/solution/multistrataagroforestry/__init__.py
index d9bff1c59..45bfce44a 100644
--- a/solution/multistrataagroforestry/__init__.py
+++ b/solution/multistrataagroforestry/__init__.py
@@ -27,74 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_from_CONVENTIONAL_Practice.csv"),
-        use_weight=True),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'Above-Ground Biomass C Sequestration': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Above_Ground_Biomass_C_Sequestration.csv"),
-        use_weight=False),
-    'Below-Ground Biomass C Sequestration': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Below_Ground_Biomass_C_Sequestration.csv"),
-        use_weight=False),
-    'Soil Organic Carbon C Sequestration': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Soil_Organic_Carbon_C_Sequestration.csv"),
-        use_weight=False),
-    'Book Edition 1 TLA': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Book_Edition_1_TLA.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/multistrataagroforestry/vma_data/vma_sources.json b/solution/multistrataagroforestry/vma_data/vma_sources.json
new file mode 100644
index 000000000..372210ca8
--- /dev/null
+++ b/solution/multistrataagroforestry/vma_data/vma_sources.json
@@ -0,0 +1,68 @@
+{
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Yield from CONVENTIONAL Practice": {
+    "title": "Yield from CONVENTIONAL Practice",
+    "filename": "Yield_from_CONVENTIONAL_Practice.csv",
+    "use_weight": true,
+    "units": "DM tons fodder/ha/yr"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Above-Ground Biomass C Sequestration": {
+    "title": "Above-Ground Biomass C Sequestration",
+    "filename": "Above_Ground_Biomass_C_Sequestration.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Below-Ground Biomass C Sequestration": {
+    "title": "Below-Ground Biomass C Sequestration",
+    "filename": "Below_Ground_Biomass_C_Sequestration.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Soil Organic Carbon C Sequestration": {
+    "title": "Soil Organic Carbon C Sequestration",
+    "filename": "Soil_Organic_Carbon_C_Sequestration.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Book Edition 1 TLA": {
+    "title": "Book Edition 1 TLA",
+    "filename": "Book_Edition_1_TLA.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  }
+}
\ No newline at end of file
diff --git a/solution/nuclear/__init__.py b/solution/nuclear/__init__.py
index 1b81262d1..4ef1f17fd 100644
--- a/solution/nuclear/__init__.py
+++ b/solution/nuclear/__init__.py
@@ -27,89 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Coal_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Fuel price (Uranium)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Fuel_price_Uranium.csv"),
-        use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-    'Learning Rate': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_Rate.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/nuclear/vma_data/vma_sources.json b/solution/nuclear/vma_data/vma_sources.json
new file mode 100644
index 000000000..54f93883d
--- /dev/null
+++ b/solution/nuclear/vma_data/vma_sources.json
@@ -0,0 +1,61 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "Fuel price (Uranium)": {
+    "title": "Fuel price (Uranium)",
+    "filename": "Fuel_price_Uranium.csv",
+    "stat_correction": true,
+    "units": "$US2014/kWh"
+  },
+  "Learning Rate": {
+    "title": "Learning Rate",
+    "filename": "Learning_Rate.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/nutrientmanagement/__init__.py b/solution/nutrientmanagement/__init__.py
index 8666968b4..8eec67664 100644
--- a/solution/nutrientmanagement/__init__.py
+++ b/solution/nutrientmanagement/__init__.py
@@ -28,64 +28,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_N2O_CO2_eq_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Indirect_CO2_Emissions_per_CONVENTIONAL_Implementation_OR_functional_Unit_CHOOSE_ONLY_ONE.csv"),
-        use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'CO2-eq reduced during the N-fertlizer production - ammonia synthesis': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CO2_eq_reduced_during_the_N_fertlizer_production_ammonia_synthesis.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/nutrientmanagement/vma_data/vma_sources.json b/solution/nutrientmanagement/vma_data/vma_sources.json
new file mode 100644
index 000000000..7e9556377
--- /dev/null
+++ b/solution/nutrientmanagement/vma_data/vma_sources.json
@@ -0,0 +1,43 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "t CO2 Reduced per Land Unit": {
+    "title": "t CO2 Reduced per Land Unit",
+    "filename": "t_CO2_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2/ha/yr"
+  },
+  "t N2O-CO2-eq Reduced per Land Unit": {
+    "title": "t N2O-CO2-eq Reduced per Land Unit",
+    "filename": "t_N2O_CO2_eq_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t N2O-CO2-eq/ha/yr"
+  },
+  "Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE": {
+    "title": "Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE",
+    "filename": "Indirect_CO2_Emissions_per_CONVENTIONAL_Implementation_OR_functional_Unit_CHOOSE_ONLY_ONE.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha/yr"
+  },
+  "CO2-eq reduced during the N-fertlizer production - ammonia synthesis": {
+    "title": "CO2-eq reduced during the N-fertlizer production - ammonia synthesis",
+    "filename": "CO2_eq_reduced_during_the_N_fertlizer_production_ammonia_synthesis.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/offshorewind/__init__.py b/solution/offshorewind/__init__.py
index 3165d07c9..34b3feee1 100644
--- a/solution/offshorewind/__init__.py
+++ b/solution/offshorewind/__init__.py
@@ -27,89 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Coal_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Oil_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Learning Rate (%)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_Rate.csv"),
-        use_weight=False),
-    'Share of Offshore wind on total Wind Generation': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Share_of_Offshore_wind_on_total_Wind_Generation.csv"),
-        use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/offshorewind/vma_data/vma_sources.json b/solution/offshorewind/vma_data/vma_sources.json
new file mode 100644
index 000000000..ad054db29
--- /dev/null
+++ b/solution/offshorewind/vma_data/vma_sources.json
@@ -0,0 +1,92 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "Hours"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "2005-2014 Average CONVENTIONAL Fuel Price per functional unit": {
+    "title": "2005-2014 Average CONVENTIONAL Fuel Price per functional unit",
+    "filename": "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv",
+    "use_weight": true,
+    "units": "$US2014/kWh"
+  },
+  "Coal Plant Efficiency": {
+    "title": "Coal Plant Efficiency",
+    "filename": "Coal_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Natural Gas Plant Efficiency": {
+    "title": "Natural Gas Plant Efficiency",
+    "filename": "Natural_Gas_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Oil Plant Efficiency": {
+    "title": "Oil Plant Efficiency",
+    "filename": "Oil_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Learning Rate (%)": {
+    "title": "Learning Rate (%)",
+    "filename": "Learning_Rate.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Share of Offshore wind on total Wind Generation": {
+    "title": "Share of Offshore wind on total Wind Generation",
+    "filename": "Share_of_Offshore_wind_on_total_Wind_Generation.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/onshorewind/__init__.py b/solution/onshorewind/__init__.py
index c426ea84d..4eb06d16a 100644
--- a/solution/onshorewind/__init__.py
+++ b/solution/onshorewind/__init__.py
@@ -27,89 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Coal_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Oil_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Learning Rate (%)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_Rate.csv"),
-        use_weight=False),
-    'Share of Onshore wind on total Wind Generation': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Share_of_Onshore_wind_on_total_Wind_Generation.csv"),
-        use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')  |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/onshorewind/vma_data/vma_sources.json b/solution/onshorewind/vma_data/vma_sources.json
new file mode 100644
index 000000000..a88b78246
--- /dev/null
+++ b/solution/onshorewind/vma_data/vma_sources.json
@@ -0,0 +1,86 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "2005-2014 Average CONVENTIONAL Fuel Price per functional unit": {
+    "title": "2005-2014 Average CONVENTIONAL Fuel Price per functional unit",
+    "filename": "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv",
+    "use_weight": true,
+    "units": "$US2014/kWh"
+  },
+  "Coal Plant Efficiency": {
+    "title": "Coal Plant Efficiency",
+    "filename": "Coal_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Natural Gas Plant Efficiency": {
+    "title": "Natural Gas Plant Efficiency",
+    "filename": "Natural_Gas_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Oil Plant Efficiency": {
+    "title": "Oil Plant Efficiency",
+    "filename": "Oil_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Learning Rate (%)": {
+    "title": "Learning Rate (%)",
+    "filename": "Learning_Rate.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Share of Onshore wind on total Wind Generation": {
+    "title": "Share of Onshore wind on total Wind Generation",
+    "filename": "Share_of_Onshore_wind_on_total_Wind_Generation.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/peatlandrestoration/__init__.py b/solution/peatlandrestoration/__init__.py
index 8ec8345ba..3a15c395f 100644
--- a/solution/peatlandrestoration/__init__.py
+++ b/solution/peatlandrestoration/__init__.py
@@ -27,58 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/peatlandrestoration/vma_data/vma_sources.json b/solution/peatlandrestoration/vma_data/vma_sources.json
new file mode 100644
index 000000000..633e077f1
--- /dev/null
+++ b/solution/peatlandrestoration/vma_data/vma_sources.json
@@ -0,0 +1,20 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha/year"
+  },
+  "t CO2 Reduced per Land Unit": {
+    "title": "t CO2 Reduced per Land Unit",
+    "filename": "t_CO2_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2/ha"
+  }
+}
\ No newline at end of file
diff --git a/solution/peatlands/__init__.py b/solution/peatlands/__init__.py
index 221e46aef..4ef24d5ee 100644
--- a/solution/peatlands/__init__.py
+++ b/solution/peatlands/__init__.py
@@ -28,78 +28,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Electricty Used DEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Energy Efficiency Factor UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'ALTERNATIVE APPROACH Annual Energy Used UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed on DEGRADED Land': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor for UNDEGRADED Land': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_N2O_CO2_eq_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CH4_CO2_eq_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    'Indirect CO2-eq Emissions DEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2-eq Emissions UNDEGRADED LAND': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Growth Rate of Land Degradation': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Growth_Rate_of_Land_Degradation.csv"),
-        use_weight=True),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    't C storage in Protected Landtype': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_C_storage_in_Protected_Landtype.csv"),
-        use_weight=False),
-    'Global Multipler for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Tropical Multipler for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Temperate Multiplier for Regrowth': vma.VMA(
-        filename=None, use_weight=False),
-    'Peatland area in 1990': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Peatland_area_in_1990.csv"),
-        use_weight=False),
-    'Peatland area in 2008': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Peatland_area_in_2008.csv"),
-        use_weight=False),
-    'Degraded Peatland Area in 1990': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Degraded_Peatland_Area_in_1990.csv"),
-        use_weight=False),
-    'Degraded Peatland Area in 2008': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Degraded_Peatland_Area_in_2008.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/peatlands/vma_data/vma_sources.json b/solution/peatlands/vma_data/vma_sources.json
new file mode 100644
index 000000000..8eda06035
--- /dev/null
+++ b/solution/peatlands/vma_data/vma_sources.json
@@ -0,0 +1,68 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "t CO2 Reduced per Land Unit": {
+    "title": "t CO2 Reduced per Land Unit",
+    "filename": "t_CO2_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2/ha/year"
+  },
+  "t N2O-CO2-eq Reduced per Land Unit": {
+    "title": "t N2O-CO2-eq Reduced per Land Unit",
+    "filename": "t_N2O_CO2_eq_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t N2O-CO2-eq/ha/year"
+  },
+  "t CH4-CO2-eq Reduced per Land Unit": {
+    "title": "t CH4-CO2-eq Reduced per Land Unit",
+    "filename": "t_CH4_CO2_eq_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CH4-CO2-eq/ha/year"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Growth Rate of Land Degradation": {
+    "title": "Growth Rate of Land Degradation",
+    "filename": "Growth_Rate_of_Land_Degradation.csv",
+    "use_weight": true,
+    "units": "% Annually"
+  },
+  "t C storage in Protected Landtype": {
+    "title": "t C storage in Protected Landtype",
+    "filename": "t_C_storage_in_Protected_Landtype.csv",
+    "stat_correction": true,
+    "units": "t C/ha"
+  },
+  "Peatland area in 1990": {
+    "title": "Peatland area in 1990",
+    "filename": "Peatland_area_in_1990.csv",
+    "stat_correction": true,
+    "units": "million hectare"
+  },
+  "Peatland area in 2008": {
+    "title": "Peatland area in 2008",
+    "filename": "Peatland_area_in_2008.csv",
+    "stat_correction": true,
+    "units": "million hectare"
+  },
+  "Degraded Peatland Area in 1990": {
+    "title": "Degraded Peatland Area in 1990",
+    "filename": "Degraded_Peatland_Area_in_1990.csv",
+    "stat_correction": true,
+    "units": "million hectare"
+  },
+  "Degraded Peatland Area in 2008": {
+    "title": "Degraded Peatland Area in 2008",
+    "filename": "Degraded_Peatland_Area_in_2008.csv",
+    "stat_correction": true,
+    "units": "million hectare"
+  }
+}
\ No newline at end of file
diff --git a/solution/perennialbioenergy/__init__.py b/solution/perennialbioenergy/__init__.py
index 2460f5441..baaeff6b4 100644
--- a/solution/perennialbioenergy/__init__.py
+++ b/solution/perennialbioenergy/__init__.py
@@ -28,83 +28,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Energy_Efficiency_Factor.csv"),
-        use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Total_Energy_Used_per_SOLUTION_functional_unit.csv"),
-        use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_N2O_CO2_eq_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestered_Carbon_NOT_Emitted_after_Cyclical_Harvesting_Clearing.csv"),
-        use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'Rotational length (years)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Rotational_length_years.csv"),
-        use_weight=False),
-    'Carbon content in biomass (%)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Carbon_content_in_biomass.csv"),
-        use_weight=False),
-    'Future adoption (million hectares)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Future_adoption_million_hectares.csv"),
-        use_weight=False),
-    'DM above ground biomass harvest yield (t/year )': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "DM_above_ground_biomass_harvest_yield_t_year.csv"),
-        use_weight=False),
-    'Weight for financial variable on degraded area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Weight_for_financial_variable_on_degraded_area.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/perennialbioenergy/vma_data/vma_sources.json b/solution/perennialbioenergy/vma_data/vma_sources.json
new file mode 100644
index 000000000..f6b3477fb
--- /dev/null
+++ b/solution/perennialbioenergy/vma_data/vma_sources.json
@@ -0,0 +1,110 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Energy Efficiency Factor": {
+    "title": "SOLUTION Energy Efficiency Factor",
+    "filename": "SOLUTION_Energy_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Total Energy Used per SOLUTION functional unit": {
+    "title": "Total Energy Used per SOLUTION functional unit",
+    "filename": "Total_Energy_Used_per_SOLUTION_functional_unit.csv",
+    "stat_correction": true,
+    "units": "TWh/ha/year"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha/year"
+  },
+  "t CO2 Reduced per Land Unit": {
+    "title": "t CO2 Reduced per Land Unit",
+    "filename": "t_CO2_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2/ha"
+  },
+  "t N2O-CO2-eq Reduced per Land Unit": {
+    "title": "t N2O-CO2-eq Reduced per Land Unit",
+    "filename": "t_N2O_CO2_eq_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t N2O-CO2-eq/ha"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing": {
+    "title": "Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing",
+    "filename": "Sequestered_Carbon_NOT_Emitted_after_Cyclical_Harvesting_Clearing.csv",
+    "stat_correction": true,
+    "units": "t C/ha"
+  },
+  "Rotational length (years)": {
+    "title": "Rotational length (years)",
+    "filename": "Rotational_length_years.csv",
+    "stat_correction": true,
+    "units": "years"
+  },
+  "Carbon content in biomass (%)": {
+    "title": "Carbon content in biomass (%)",
+    "filename": "Carbon_content_in_biomass.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Future adoption (million hectares)": {
+    "title": "Future adoption (million hectares)",
+    "filename": "Future_adoption_million_hectares.csv",
+    "stat_correction": true,
+    "units": "Million Hectares"
+  },
+  "DM above ground biomass harvest yield (t/year )": {
+    "title": "DM above ground biomass harvest yield (t/year )",
+    "filename": "DM_above_ground_biomass_harvest_yield_t_year.csv",
+    "stat_correction": true,
+    "units": "t/jha"
+  },
+  "Weight for financial variable on degraded area": {
+    "title": "Weight for financial variable on degraded area",
+    "filename": "Weight_for_financial_variable_on_degraded_area.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/recycledmetals/__init__.py b/solution/recycledmetals/__init__.py
index 8c4ed3283..fdcffc77d 100644
--- a/solution/recycledmetals/__init__.py
+++ b/solution/recycledmetals/__init__.py
@@ -26,63 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Facility for 1 MMt of Metal Production",
diff --git a/solution/recycledmetals/vma_data/vma_sources.json b/solution/recycledmetals/vma_data/vma_sources.json
new file mode 100644
index 000000000..bc5c42158
--- /dev/null
+++ b/solution/recycledmetals/vma_data/vma_sources.json
@@ -0,0 +1,38 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "MMt Metal Production"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/MMt Metal Production"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/MMt Metal Production"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US2014$/Facility for 1 MMt of Metal Production"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/MMt Metal Production"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/MMt Metal Production"
+  }
+}
\ No newline at end of file
diff --git a/solution/recycledpaper/__init__.py b/solution/recycledpaper/__init__.py
index b8da109cb..1052bf79c 100644
--- a/solution/recycledpaper/__init__.py
+++ b/solution/recycledpaper/__init__.py
@@ -26,74 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=True),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-            use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL - Transport and Retail': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Indirect_CO2_Emissions_per_CONVENTIONAL_Transport_and_Retail.csv"),
-            use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION - Transport and Retail': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Indirect_CO2_Emissions_per_SOLUTION_Transport_and_Retail.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Million Metric Tonnes of Recycled Paper Produced",
diff --git a/solution/recycledpaper/vma_data/vma_sources.json b/solution/recycledpaper/vma_data/vma_sources.json
new file mode 100644
index 000000000..35a8fdd06
--- /dev/null
+++ b/solution/recycledpaper/vma_data/vma_sources.json
@@ -0,0 +1,80 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Million Metric Tonnes of Paper Produced"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Million Metric Tonnes of Recycled Paper Produced"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Million Metric Tonnes of Recycled Paper Produced"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Million Metric Tonnes of Paper Produced/Million Metric Tonnes of Recycled Paper Produced"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Million Metric Tonnes of Paper Produced/Million Metric Tonnes of Recycled Paper Produced"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Million Metric Tonnes of Paper Produced/Million Metric Tonnes of Recycled Paper Produced/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Million Metric Tonnes of Paper Produced/Million Metric Tonnes of Recycled Paper Produced/year"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Million Metric Tonnes of Paper Produced"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/Million Metric Tonnes of Paper Produced"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Million Metric Tonnes of Paper Produced"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Million Metric Tonnes of Paper Produced"
+  },
+  "Indirect CO2 Emissions per CONVENTIONAL - Transport and Retail": {
+    "title": "Indirect CO2 Emissions per CONVENTIONAL - Transport and Retail",
+    "filename": "Indirect_CO2_Emissions_per_CONVENTIONAL_Transport_and_Retail.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/million metric tons paper"
+  },
+  "Indirect CO2 Emissions per SOLUTION - Transport and Retail": {
+    "title": "Indirect CO2 Emissions per SOLUTION - Transport and Retail",
+    "filename": "Indirect_CO2_Emissions_per_SOLUTION_Transport_and_Retail.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/million metric tons paper"
+  }
+}
\ No newline at end of file
diff --git a/solution/recycledplastics/__init__.py b/solution/recycledplastics/__init__.py
index 3c42890ae..899ffb1de 100644
--- a/solution/recycledplastics/__init__.py
+++ b/solution/recycledplastics/__init__.py
@@ -26,65 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Recycling Yield': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Recycling_Yield.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "MMt Plastic Production",
diff --git a/solution/recycledplastics/vma_data/vma_sources.json b/solution/recycledplastics/vma_data/vma_sources.json
new file mode 100644
index 000000000..fb6507f21
--- /dev/null
+++ b/solution/recycledplastics/vma_data/vma_sources.json
@@ -0,0 +1,38 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "MMt Plastic Production"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/MMt Plastic Production"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/MMt Plastic Production"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/MMt Plastic Production"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/MMt Plastic Production"
+  },
+  "Recycling Yield": {
+    "title": "Recycling Yield",
+    "filename": "Recycling_Yield.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/refrigerants/__init__.py b/solution/refrigerants/__init__.py
index 4ca5c82dc..0e505a58e 100644
--- a/solution/refrigerants/__init__.py
+++ b/solution/refrigerants/__init__.py
@@ -26,65 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Kilo Tonnes (Refrigerant destroyed and avoided)",
diff --git a/solution/refrigerants/vma_data/vma_sources.json b/solution/refrigerants/vma_data/vma_sources.json
new file mode 100644
index 000000000..32a9cdf8b
--- /dev/null
+++ b/solution/refrigerants/vma_data/vma_sources.json
@@ -0,0 +1,50 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Kilo Tonnes (Recoverable refrigerant)"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Kilo Tonnes (Recoverable refrigerant)/Kilo Tonnes (Refrigerant destroyed and avoided)"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Kilo Tonnes (Recoverable refrigerant)/Kilo Tonnes (Refrigerant destroyed and avoided)"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Kilo Tonnes (Recoverable refrigerant)/Kilo Tonnes (Refrigerant destroyed and avoided)/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Kilo Tonnes (Recoverable refrigerant)/Kilo Tonnes (Refrigerant destroyed and avoided)/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Kilo Tonnes (Recoverable refrigerant)"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/Kilo Tonnes (Recoverable refrigerant)"
+  },
+  "CONVENTIONAL Direct Emissions per Functional Unit": {
+    "title": "CONVENTIONAL Direct Emissions per Functional Unit",
+    "filename": "CONVENTIONAL_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/Kilo Tonnes (Recoverable refrigerant)"
+  }
+}
\ No newline at end of file
diff --git a/solution/regenerativeagriculture/__init__.py b/solution/regenerativeagriculture/__init__.py
index 060736e8a..790b52bd0 100644
--- a/solution/regenerativeagriculture/__init__.py
+++ b/solution/regenerativeagriculture/__init__.py
@@ -27,65 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_from_CONVENTIONAL_Practice.csv"),
-        use_weight=True),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per  Implementation Unit - SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/regenerativeagriculture/vma_data/vma_sources.json b/solution/regenerativeagriculture/vma_data/vma_sources.json
new file mode 100644
index 000000000..5993e8b5b
--- /dev/null
+++ b/solution/regenerativeagriculture/vma_data/vma_sources.json
@@ -0,0 +1,62 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Yield from CONVENTIONAL Practice": {
+    "title": "Yield from CONVENTIONAL Practice",
+    "filename": "Yield_from_CONVENTIONAL_Practice.csv",
+    "use_weight": true,
+    "units": "t/ha/yr"
+  },
+  "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)": {
+    "title": "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)",
+    "filename": "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha/year"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  }
+}
\ No newline at end of file
diff --git a/solution/residentialglass/__init__.py b/solution/residentialglass/__init__.py
index 611143e65..ec1306a80 100644
--- a/solution/residentialglass/__init__.py
+++ b/solution/residentialglass/__init__.py
@@ -26,84 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Heating Energy Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Heating_Energy_Efficiency.csv"),
-        use_weight=False),
-    'Cooling Energy Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Cooling_Energy_Efficiency.csv"),
-        use_weight=False),
-    'Average Energy for Space Cooling per Floor Area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Energy_for_Space_Cooling_per_Floor_Area.csv"),
-        use_weight=False),
-    'Average Energy for Space Heating per Floor Area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Energy_for_Space_Heating_per_Floor_Area.csv"),
-        use_weight=False),
-    'Discount Rate - Households': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Households.csv"),
-        use_weight=False),
-    'Residential Window to Floor Ratio': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Residential_Window_to_Floor_Ratio.csv"),
-        use_weight=True),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "million sq-meters",
diff --git a/solution/residentialglass/vma_data/vma_sources.json b/solution/residentialglass/vma_data/vma_sources.json
new file mode 100644
index 000000000..e58eaedb3
--- /dev/null
+++ b/solution/residentialglass/vma_data/vma_sources.json
@@ -0,0 +1,74 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "units": "million sq-meters"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "units": "US2014$/million sq-meters"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "units": "US2014$/million sq-meters"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "units": "million sq-meters/million sq-meters"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "units": "million sq-meters/million sq-meters"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "units": "TWh/million sq-meters"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "units": "TWh/million sq-meters"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "units": "TJ/million sq-meters"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "units": "%"
+  },
+  "Heating Energy Efficiency": {
+    "title": "Heating Energy Efficiency",
+    "filename": "Heating_Energy_Efficiency.csv"
+  },
+  "Cooling Energy Efficiency": {
+    "title": "Cooling Energy Efficiency",
+    "filename": "Cooling_Energy_Efficiency.csv"
+  },
+  "Average Energy for Space Cooling per Floor Area": {
+    "title": "Average Energy for Space Cooling per Floor Area",
+    "filename": "Average_Energy_for_Space_Cooling_per_Floor_Area.csv",
+    "units": "kWh/m2"
+  },
+  "Average Energy for Space Heating per Floor Area": {
+    "title": "Average Energy for Space Heating per Floor Area",
+    "filename": "Average_Energy_for_Space_Heating_per_Floor_Area.csv",
+    "units": "kWh/m2"
+  },
+  "Discount Rate - Households": {
+    "title": "Discount Rate - Households",
+    "filename": "Discount_Rate_Households.csv"
+  },
+  "Residential Window to Floor Ratio": {
+    "title": "Residential Window to Floor Ratio",
+    "filename": "Residential_Window_to_Floor_Ratio.csv",
+    "use_weight": true
+  }
+}
\ No newline at end of file
diff --git a/solution/riceintensification/__init__.py b/solution/riceintensification/__init__.py
index e49ddbc6c..5a2923791 100644
--- a/solution/riceintensification/__init__.py
+++ b/solution/riceintensification/__init__.py
@@ -28,67 +28,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_from_CONVENTIONAL_Practice.csv"),
-        use_weight=True),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_N2O_CO2_eq_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CH4_CO2_eq_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per  Implementation Unit - SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/riceintensification/vma_data/vma_sources.json b/solution/riceintensification/vma_data/vma_sources.json
new file mode 100644
index 000000000..9e12ba8c1
--- /dev/null
+++ b/solution/riceintensification/vma_data/vma_sources.json
@@ -0,0 +1,74 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Yield from CONVENTIONAL Practice": {
+    "title": "Yield from CONVENTIONAL Practice",
+    "filename": "Yield_from_CONVENTIONAL_Practice.csv",
+    "use_weight": true,
+    "units": "t/ha/yr"
+  },
+  "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)": {
+    "title": "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)",
+    "filename": "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha"
+  },
+  "t CO2 Reduced per Land Unit": {
+    "title": "t CO2 Reduced per Land Unit",
+    "filename": "t_CO2_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2/ha/year"
+  },
+  "t N2O-CO2-eq Reduced per Land Unit": {
+    "title": "t N2O-CO2-eq Reduced per Land Unit",
+    "filename": "t_N2O_CO2_eq_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t N2O-CO2-eq/ha/year"
+  },
+  "t CH4-CO2-eq Reduced per Land Unit": {
+    "title": "t CH4-CO2-eq Reduced per Land Unit",
+    "filename": "t_CH4_CO2_eq_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CH4-CO2-eq/ha/year"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  }
+}
\ No newline at end of file
diff --git a/solution/ships/__init__.py b/solution/ships/__init__.py
index 8111616fa..fe33b585d 100644
--- a/solution/ships/__init__.py
+++ b/solution/ships/__init__.py
@@ -26,73 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-    'Learning Rate': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_Rate.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Ship",
diff --git a/solution/ships/vma_data/vma_sources.json b/solution/ships/vma_data/vma_sources.json
new file mode 100644
index 000000000..a3277081f
--- /dev/null
+++ b/solution/ships/vma_data/vma_sources.json
@@ -0,0 +1,72 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Billion Ton - nmiles"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Ship"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Ship"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Billion Ton - nmiles/Ship"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Billion Ton - nmiles/Ship"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Billion Ton - nmiles/Ship/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Billion Ton - nmiles/Ship/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Billion Ton - nmiles"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/Billion Ton - nmiles"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Discount Rate: Commercial / Industry": {
+    "title": "Discount Rate: Commercial / Industry",
+    "filename": "Discount_Rate_Commercial_Industry.csv",
+    "stat_correction": true
+  },
+  "Learning Rate": {
+    "title": "Learning Rate",
+    "filename": "Learning_Rate.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/silvopasture/__init__.py b/solution/silvopasture/__init__.py
index 71d6c43e0..bb93c37b8 100644
--- a/solution/silvopasture/__init__.py
+++ b/solution/silvopasture/__init__.py
@@ -27,89 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_from_CONVENTIONAL_Practice.csv"),
-        use_weight=True),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv"),
-        use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CH4_CO2_eq_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=True),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'Percent silvopasture area to the total grassland area (including potential)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Percent_silvopasture_area_to_the_total_grassland_area_including_potential.csv"),
-        use_weight=False),
-    'Above-ground biomass (AGB)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Above_ground_biomass_AGB.csv"),
-        use_weight=False),
-    'Below-ground biomass (BGB)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Below_ground_biomass_BGB.csv"),
-        use_weight=False),
-    'Soil organic carbon (SOC)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Soil_organic_carbon_SOC.csv"),
-        use_weight=False),
-    'Total C sequestration CONVENTIONAL (degraded pasture / pasture no trees)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Total_C_sequestration_CONVENTIONAL_degraded_pasture_pasture_no_trees.csv"),
-        use_weight=False),
-    'Total Pasture/Grazing Area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Total_Pasture_Grazing_Area.csv"),
-        use_weight=False),
-    'Total Silvopasture Area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Total_Silvopasture_Area.csv"),
-        use_weight=False),
-    'Percent silvopasture area to the total pasture/grazing land area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Percent_silvopasture_area_to_the_total_pasture_grazing_land_area.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/silvopasture/vma_data/vma_sources.json b/solution/silvopasture/vma_data/vma_sources.json
new file mode 100644
index 000000000..3bc80e6c5
--- /dev/null
+++ b/solution/silvopasture/vma_data/vma_sources.json
@@ -0,0 +1,110 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Yield from CONVENTIONAL Practice": {
+    "title": "Yield from CONVENTIONAL Practice",
+    "filename": "Yield_from_CONVENTIONAL_Practice.csv",
+    "use_weight": true,
+    "units": "DM tons fodder/ha/yr"
+  },
+  "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)": {
+    "title": "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)",
+    "filename": "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "t CH4-CO2-eq Reduced per Land Unit": {
+    "title": "t CH4-CO2-eq Reduced per Land Unit",
+    "filename": "t_CH4_CO2_eq_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CH4-CO2-eq/ha/yr"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "use_weight": true,
+    "units": "t C/ha/yr"
+  },
+  "Percent silvopasture area to the total grassland area (including potential)": {
+    "title": "Percent silvopasture area to the total grassland area (including potential)",
+    "filename": "Percent_silvopasture_area_to_the_total_grassland_area_including_potential.csv",
+    "stat_correction": true,
+    "units": "% of grazing land"
+  },
+  "Above-ground biomass (AGB)": {
+    "title": "Above-ground biomass (AGB)",
+    "filename": "Above_ground_biomass_AGB.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Below-ground biomass (BGB)": {
+    "title": "Below-ground biomass (BGB)",
+    "filename": "Below_ground_biomass_BGB.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Soil organic carbon (SOC)": {
+    "title": "Soil organic carbon (SOC)",
+    "filename": "Soil_organic_carbon_SOC.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Total C sequestration CONVENTIONAL (degraded pasture / pasture no trees)": {
+    "title": "Total C sequestration CONVENTIONAL (degraded pasture / pasture no trees)",
+    "filename": "Total_C_sequestration_CONVENTIONAL_degraded_pasture_pasture_no_trees.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Total Pasture/Grazing Area": {
+    "title": "Total Pasture/Grazing Area",
+    "filename": "Total_Pasture_Grazing_Area.csv",
+    "stat_correction": true,
+    "units": "Mha"
+  },
+  "Total Silvopasture Area": {
+    "title": "Total Silvopasture Area",
+    "filename": "Total_Silvopasture_Area.csv",
+    "stat_correction": true,
+    "units": "Mha"
+  },
+  "Percent silvopasture area to the total pasture/grazing land area": {
+    "title": "Percent silvopasture area to the total pasture/grazing land area",
+    "filename": "Percent_silvopasture_area_to_the_total_pasture_grazing_land_area.csv",
+    "stat_correction": true,
+    "units": "% of grazing land"
+  }
+}
\ No newline at end of file
diff --git a/solution/smartglass/__init__.py b/solution/smartglass/__init__.py
index b1de3ab53..2414db46b 100644
--- a/solution/smartglass/__init__.py
+++ b/solution/smartglass/__init__.py
@@ -26,83 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'Commercial Window to Floor Area Ratio': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Commercial_Window_to_Floor_Area_Ratio.csv"),
-            use_weight=False),
-    'Energy Efficiency of Cooling with Smart Glass': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Energy_Efficiency_of_Cooling_with_Smart_Glass.csv"),
-            use_weight=False),
-    'Energy Efficiency of Lighting with Smart Glass': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Energy_Efficiency_of_Lighting_with_Smart_Glass.csv"),
-            use_weight=False),
-    'Average Energy for Commercial Cooling per Floor Area': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Average_Energy_for_Commercial_Cooling_per_Floor_Area.csv"),
-            use_weight=False),
-    'Average Energy for Commercial Lighting per Floor Area': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Average_Energy_for_Commercial_Lighting_per_Floor_Area.csv"),
-            use_weight=False),
-    'Learning Rate for Similar Technology (A/C units)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Learning_Rate_for_Similar_Technology_A_C_units.csv"),
-            use_weight=False),
-    'Discount Rate - Commercial': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Discount_Rate_Commercial.csv"),
-            use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Mm²",
diff --git a/solution/smartglass/vma_data/vma_sources.json b/solution/smartglass/vma_data/vma_sources.json
new file mode 100644
index 000000000..fe3a44bbf
--- /dev/null
+++ b/solution/smartglass/vma_data/vma_sources.json
@@ -0,0 +1,70 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million m2 commercial floor space"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/million m2 commercial floor space"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/million m2 commercial floor space"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "million m2 commercial floor space/million m2 commercial floor space"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "million m2 commercial floor space/million m2 commercial floor space"
+  },
+  "Commercial Window to Floor Area Ratio": {
+    "title": "Commercial Window to Floor Area Ratio",
+    "filename": "Commercial_Window_to_Floor_Area_Ratio.csv",
+    "stat_correction": true,
+    "units": "(ratio)"
+  },
+  "Energy Efficiency of Cooling with Smart Glass": {
+    "title": "Energy Efficiency of Cooling with Smart Glass",
+    "filename": "Energy_Efficiency_of_Cooling_with_Smart_Glass.csv",
+    "stat_correction": true
+  },
+  "Energy Efficiency of Lighting with Smart Glass": {
+    "title": "Energy Efficiency of Lighting with Smart Glass",
+    "filename": "Energy_Efficiency_of_Lighting_with_Smart_Glass.csv",
+    "stat_correction": true
+  },
+  "Average Energy for Commercial Cooling per Floor Area": {
+    "title": "Average Energy for Commercial Cooling per Floor Area",
+    "filename": "Average_Energy_for_Commercial_Cooling_per_Floor_Area.csv",
+    "stat_correction": true,
+    "units": "TWh/million m2 of commercial area/yr"
+  },
+  "Average Energy for Commercial Lighting per Floor Area": {
+    "title": "Average Energy for Commercial Lighting per Floor Area",
+    "filename": "Average_Energy_for_Commercial_Lighting_per_Floor_Area.csv",
+    "stat_correction": true,
+    "units": "TWh/million m2 of commercial area/yr"
+  },
+  "Learning Rate for Similar Technology (A/C units)": {
+    "title": "Learning Rate for Similar Technology (A/C units)",
+    "filename": "Learning_Rate_for_Similar_Technology_A_C_units.csv",
+    "stat_correction": true
+  },
+  "Discount Rate - Commercial": {
+    "title": "Discount Rate - Commercial",
+    "filename": "Discount_Rate_Commercial.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/smartthermostats/__init__.py b/solution/smartthermostats/__init__.py
index 339964ddc..bb0e8acde 100644
--- a/solution/smartthermostats/__init__.py
+++ b/solution/smartthermostats/__init__.py
@@ -26,83 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Energy_Efficiency_Factor.csv"),
-            use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-            use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'Residential Electricity Price': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Residential_Electricity_Price.csv"),
-            use_weight=False),
-    'Residential Fuel Price for Natural Gas': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Residential_Fuel_Price_for_Natural_Gas.csv"),
-            use_weight=False),
-    'Learning Rates for Air Conditioners': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Learning_Rates_for_Air_Conditioners.csv"),
-            use_weight=False),
-    'Energy Consumed for Space Heating per Functional Unit - CONVENTIONAL': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Energy_Consumed_for_Space_Heating_per_Functional_Unit_CONVENTIONAL.csv"),
-            use_weight=True),
-    'Electricty Consumed for Space Cooling per Functional Unit - CONVENTIONAL': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Electricty_Consumed_for_Space_Cooling_per_Functional_Unit_CONVENTIONAL.csv"),
-            use_weight=True),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "MHholds",
diff --git a/solution/smartthermostats/vma_data/vma_sources.json b/solution/smartthermostats/vma_data/vma_sources.json
new file mode 100644
index 000000000..22ed3bfd7
--- /dev/null
+++ b/solution/smartthermostats/vma_data/vma_sources.json
@@ -0,0 +1,98 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Million Households"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Million Households"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Million Households"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "use_weight": true,
+    "units": "Million Households/Million Households"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Million Households/Million Households"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Million Households"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Million Households"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/Million Households"
+  },
+  "SOLUTION Energy Efficiency Factor": {
+    "title": "SOLUTION Energy Efficiency Factor",
+    "filename": "SOLUTION_Energy_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "TJ/Million Households"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Residential Electricity Price": {
+    "title": "Residential Electricity Price",
+    "filename": "Residential_Electricity_Price.csv",
+    "stat_correction": true,
+    "units": "US$2014/TWh"
+  },
+  "Residential Fuel Price for Natural Gas": {
+    "title": "Residential Fuel Price for Natural Gas",
+    "filename": "Residential_Fuel_Price_for_Natural_Gas.csv",
+    "stat_correction": true,
+    "units": "US$2014/TJ"
+  },
+  "Learning Rates for Air Conditioners": {
+    "title": "Learning Rates for Air Conditioners",
+    "filename": "Learning_Rates_for_Air_Conditioners.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Energy Consumed for Space Heating per Functional Unit - CONVENTIONAL": {
+    "title": "Energy Consumed for Space Heating per Functional Unit - CONVENTIONAL",
+    "filename": "Energy_Consumed_for_Space_Heating_per_Functional_Unit_CONVENTIONAL.csv",
+    "use_weight": true,
+    "units": "TWh/million HH/yr"
+  },
+  "Electricty Consumed for Space Cooling per Functional Unit - CONVENTIONAL": {
+    "title": "Electricty Consumed for Space Cooling per Functional Unit - CONVENTIONAL",
+    "filename": "Electricty_Consumed_for_Space_Cooling_per_Functional_Unit_CONVENTIONAL.csv",
+    "use_weight": true,
+    "units": "TWh/million HH/yr"
+  }
+}
\ No newline at end of file
diff --git a/solution/solarhotwater/__init__.py b/solution/solarhotwater/__init__.py
index b90798291..495837a2d 100644
--- a/solution/solarhotwater/__init__.py
+++ b/solution/solarhotwater/__init__.py
@@ -26,81 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-            use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Conversion factor for collector area to solar thermal capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Conversion_factor_for_collector_area_to_solar_thermal_capacity.csv"),
-            use_weight=False),
-    'Natural Gas Share of Conventional Water Heating': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Natural_Gas_Share_of_Conventional_Water_Heating.csv"),
-            use_weight=False),
-    'Electricity Share of Conventional Water Heating': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Electricity_Share_of_Conventional_Water_Heating.csv"),
-            use_weight=False),
-    'Conventional Fuel HW Efficiency': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Conventional_Fuel_HW_Efficiency.csv"),
-            use_weight=True),
-    'Conventional Electricity HW Efficiency': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Conventional_Electricity_HW_Efficiency.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/solarhotwater/vma_data/vma_sources.json b/solution/solarhotwater/vma_data/vma_sources.json
new file mode 100644
index 000000000..97623a69b
--- /dev/null
+++ b/solution/solarhotwater/vma_data/vma_sources.json
@@ -0,0 +1,81 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh(th)"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh(th)/TW"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh(th)/TW/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/kWh (th)"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/kWh (th)"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/TWh(th)"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TJ/TWh(th)"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Conversion factor for collector area to solar thermal capacity": {
+    "title": "Conversion factor for collector area to solar thermal capacity",
+    "filename": "Conversion_factor_for_collector_area_to_solar_thermal_capacity.csv",
+    "stat_correction": true
+  },
+  "Natural Gas Share of Conventional Water Heating": {
+    "title": "Natural Gas Share of Conventional Water Heating",
+    "filename": "Natural_Gas_Share_of_Conventional_Water_Heating.csv",
+    "stat_correction": true
+  },
+  "Electricity Share of Conventional Water Heating": {
+    "title": "Electricity Share of Conventional Water Heating",
+    "filename": "Electricity_Share_of_Conventional_Water_Heating.csv",
+    "stat_correction": true
+  },
+  "Conventional Fuel HW Efficiency": {
+    "title": "Conventional Fuel HW Efficiency",
+    "filename": "Conventional_Fuel_HW_Efficiency.csv",
+    "use_weight": true
+  },
+  "Conventional Electricity HW Efficiency": {
+    "title": "Conventional Electricity HW Efficiency",
+    "filename": "Conventional_Electricity_HW_Efficiency.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/solarpvroof/__init__.py b/solution/solarpvroof/__init__.py
index d404f6bc0..647e2c347 100644
--- a/solution/solarpvroof/__init__.py
+++ b/solution/solarpvroof/__init__.py
@@ -27,95 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Coal_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    '% of PV generated by roof-top solar PV': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "of_PV_generated_by_roof_top_solar_PV.csv"),
-        use_weight=False),
-    'Solar PV Module Learning Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Solar_PV_Module_Learning_Rates.csv"),
-        use_weight=False),
-    'BOS Learning Rates for Rooftop Solar': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "BOS_Learning_Rates_for_Rooftop_Solar.csv"),
-        use_weight=False),
-    '% of PV System Installed Costs from Module': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "of_PV_System_Installed_Costs_from_Module.csv"),
-        use_weight=False),
-    'Discount Rates: Households': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rates_Households.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/solarpvroof/vma_data/vma_sources.json b/solution/solarpvroof/vma_data/vma_sources.json
new file mode 100644
index 000000000..6097c4a5a
--- /dev/null
+++ b/solution/solarpvroof/vma_data/vma_sources.json
@@ -0,0 +1,80 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "% of PV generated by roof-top solar PV": {
+    "title": "% of PV generated by roof-top solar PV",
+    "filename": "of_PV_generated_by_roof_top_solar_PV.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Solar PV Module Learning Rates": {
+    "title": "Solar PV Module Learning Rates",
+    "filename": "Solar_PV_Module_Learning_Rates.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "BOS Learning Rates for Rooftop Solar": {
+    "title": "BOS Learning Rates for Rooftop Solar",
+    "filename": "BOS_Learning_Rates_for_Rooftop_Solar.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "% of PV System Installed Costs from Module": {
+    "title": "% of PV System Installed Costs from Module",
+    "filename": "of_PV_System_Installed_Costs_from_Module.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Discount Rates: Households": {
+    "title": "Discount Rates: Households",
+    "filename": "Discount_Rates_Households.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/solarpvutil/__init__.py b/solution/solarpvutil/__init__.py
index ee3c24c83..ef2cf401b 100644
--- a/solution/solarpvutil/__init__.py
+++ b/solution/solarpvutil/__init__.py
@@ -27,80 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Coal_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/solarpvutil/vma_data/vma_sources.json b/solution/solarpvutil/vma_data/vma_sources.json
new file mode 100644
index 000000000..4b60f9fd0
--- /dev/null
+++ b/solution/solarpvutil/vma_data/vma_sources.json
@@ -0,0 +1,74 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "2005-2014 Average CONVENTIONAL Fuel Price per functional unit": {
+    "title": "2005-2014 Average CONVENTIONAL Fuel Price per functional unit",
+    "filename": "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv",
+    "use_weight": true,
+    "units": "$US2014/kWh"
+  },
+  "Coal Plant Efficiency": {
+    "title": "Coal Plant Efficiency",
+    "filename": "Coal_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Natural Gas Plant Efficiency": {
+    "title": "Natural Gas Plant Efficiency",
+    "filename": "Natural_Gas_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/sustainableclothing/__init__.py b/solution/sustainableclothing/__init__.py
index 56b87f9c5..627b97930 100644
--- a/solution/sustainableclothing/__init__.py
+++ b/solution/sustainableclothing/__init__.py
@@ -26,58 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "1 Million Metric Ton Clothing",
diff --git a/solution/sustainableclothing/vma_data/vma_sources.json b/solution/sustainableclothing/vma_data/vma_sources.json
new file mode 100644
index 000000000..985a459a7
--- /dev/null
+++ b/solution/sustainableclothing/vma_data/vma_sources.json
@@ -0,0 +1,8 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "1 Million Metric Ton Clothing"
+  }
+}
\ No newline at end of file
diff --git a/solution/telepresence/__init__.py b/solution/telepresence/__init__.py
index d79a82c2e..331f05716 100644
--- a/solution/telepresence/__init__.py
+++ b/solution/telepresence/__init__.py
@@ -26,92 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=True),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=True),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=True),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Number of Air Business Trips Annually': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Total_Number_of_Air_Business_Trips_Annually.csv"),
-        use_weight=False),
-    'Share of Business Travel': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Share_of_Business_Travel.csv"),
-        use_weight=False),
-    'Bandwidth Cost': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Bandwidth_Cost.csv"),
-        use_weight=True),
-    'Annual Maintenance Cost': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Annual_Maintenance_Cost.csv"),
-        use_weight=True),
-    'Global Adoption by 2050': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Global_Adoption_by_2050.csv"),
-        use_weight=False),
-    'Discount Rates - Commercial': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rates_Commercial.csv"),
-        use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Estimated Rebound/ Induced Demand': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Estimated_Rebound_Induced_Demand.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Active VC user",
diff --git a/solution/telepresence/vma_data/vma_sources.json b/solution/telepresence/vma_data/vma_sources.json
new file mode 100644
index 000000000..4be7fa74d
--- /dev/null
+++ b/solution/telepresence/vma_data/vma_sources.json
@@ -0,0 +1,125 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "passenger-km/pkm equivalent"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Active VC user or Trip"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Active VC user or Trip"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "passenger-km/pkm equivalent/Active VC user or Trip"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "passenger-km/pkm equivalent/Active VC user or Trip"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "passenger-km/pkm equivalent/Active VC user or Trip/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "passenger-km/pkm equivalent/Active VC user or Trip/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/passenger-km/pkm equivalent"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/passenger-km/pkm equivalent"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "TWh/passenger-km/pkm equivalent"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/passenger-km/pkm equivalent"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/passenger-km/pkm equivalent"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "use_weight": true,
+    "units": "t CO2-eq/passenger-km/pkm equivalent"
+  },
+  "Total Number of Air Business Trips Annually": {
+    "title": "Total Number of Air Business Trips Annually",
+    "filename": "Total_Number_of_Air_Business_Trips_Annually.csv",
+    "stat_correction": true
+  },
+  "Share of Business Travel": {
+    "title": "Share of Business Travel",
+    "filename": "Share_of_Business_Travel.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Bandwidth Cost": {
+    "title": "Bandwidth Cost",
+    "filename": "Bandwidth_Cost.csv",
+    "use_weight": true,
+    "units": "US$2014/VC user/yr"
+  },
+  "Annual Maintenance Cost": {
+    "title": "Annual Maintenance Cost",
+    "filename": "Annual_Maintenance_Cost.csv",
+    "use_weight": true,
+    "units": "US$2014/VC user/yr"
+  },
+  "Global Adoption by 2050": {
+    "title": "Global Adoption by 2050",
+    "filename": "Global_Adoption_by_2050.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Discount Rates - Commercial": {
+    "title": "Discount Rates - Commercial",
+    "filename": "Discount_Rates_Commercial.csv",
+    "stat_correction": true
+  },
+  "Estimated Rebound/ Induced Demand": {
+    "title": "Estimated Rebound/ Induced Demand",
+    "filename": "Estimated_Rebound_Induced_Demand.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/temperateforests/__init__.py b/solution/temperateforests/__init__.py
index c165b44cb..dac64ad03 100644
--- a/solution/temperateforests/__init__.py
+++ b/solution/temperateforests/__init__.py
@@ -27,59 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'Percent of Degraded Land Suitable for Intact Temperate Forest Restoration': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Percent_of_Degraded_Land_Suitable_for_Intact_Temperate_Forest_Restoration.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/temperateforests/vma_data/vma_sources.json b/solution/temperateforests/vma_data/vma_sources.json
new file mode 100644
index 000000000..48cd735d1
--- /dev/null
+++ b/solution/temperateforests/vma_data/vma_sources.json
@@ -0,0 +1,13 @@
+{
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Percent of Degraded Land Suitable for Intact Temperate Forest Restoration": {
+    "title": "Percent of Degraded Land Suitable for Intact Temperate Forest Restoration",
+    "filename": "Percent_of_Degraded_Land_Suitable_for_Intact_Temperate_Forest_Restoration.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/trains/__init__.py b/solution/trains/__init__.py
index 2da3873f7..5dc6de725 100644
--- a/solution/trains/__init__.py
+++ b/solution/trains/__init__.py
@@ -27,77 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Discount Rate - Commercial/Industry': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-    'Discount Rate - Government': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Government.csv"),
-        use_weight=True),
-    'Diesel Train Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Diesel_Train_Efficiency.csv"),
-        use_weight=False),
-    'Electric Train Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Electric_Train_Efficiency.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "km of track converted",
diff --git a/solution/trains/vma_data/vma_sources.json b/solution/trains/vma_data/vma_sources.json
new file mode 100644
index 000000000..29fc19b48
--- /dev/null
+++ b/solution/trains/vma_data/vma_sources.json
@@ -0,0 +1,70 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million tonne-km"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/km of track converted"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "million tonne-km/km of track converted"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "million tonne-km/km of track converted"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "million tonne-km/km of track converted/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "million tonne-km/km of track converted/year"
+  },
+  "SOLUTION Total Energy Used per Functional Unit": {
+    "title": "SOLUTION Total Energy Used per Functional Unit",
+    "filename": "SOLUTION_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/million tonne-km"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/million tonne-km"
+  },
+  "Discount Rate - Commercial/Industry": {
+    "title": "Discount Rate - Commercial/Industry",
+    "filename": "Discount_Rate_Commercial_Industry.csv",
+    "stat_correction": true
+  },
+  "Discount Rate - Government": {
+    "title": "Discount Rate - Government",
+    "filename": "Discount_Rate_Government.csv",
+    "use_weight": true
+  },
+  "Diesel Train Efficiency": {
+    "title": "Diesel Train Efficiency",
+    "filename": "Diesel_Train_Efficiency.csv",
+    "stat_correction": true
+  },
+  "Electric Train Efficiency": {
+    "title": "Electric Train Efficiency",
+    "filename": "Electric_Train_Efficiency.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/treeintercropping/__init__.py b/solution/treeintercropping/__init__.py
index bab4283ad..916bd875f 100644
--- a/solution/treeintercropping/__init__.py
+++ b/solution/treeintercropping/__init__.py
@@ -27,80 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=True),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_from_CONVENTIONAL_Practice.csv"),
-        use_weight=True),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv"),
-        use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per  Implementation Unit - SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=True),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'C sequestered in above-ground biomass (AGB)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "C_sequestered_in_above_ground_biomass_AGB.csv"),
-        use_weight=False),
-    'C sequestered in below-ground biomass (BGB)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "C_sequestered_in_below_ground_biomass_BGB.csv"),
-        use_weight=False),
-    'C sequestered in soil organic carbon (SOC)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "C_sequestered_in_soil_organic_carbon_SOC.csv"),
-        use_weight=False),
-    'Yield on degraded cropland': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_on_degraded_cropland.csv"),
-        use_weight=False),
-    'Weight for financial variable on degraded area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Weight_for_financial_variable_on_degraded_area.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/treeintercropping/vma_data/vma_sources.json b/solution/treeintercropping/vma_data/vma_sources.json
new file mode 100644
index 000000000..2fedece7b
--- /dev/null
+++ b/solution/treeintercropping/vma_data/vma_sources.json
@@ -0,0 +1,91 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Yield from CONVENTIONAL Practice": {
+    "title": "Yield from CONVENTIONAL Practice",
+    "filename": "Yield_from_CONVENTIONAL_Practice.csv",
+    "use_weight": true,
+    "units": "t/ha/yr"
+  },
+  "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)": {
+    "title": "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)",
+    "filename": "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "t CO2-eq (Aggregate emissions) Reduced per Land Unit": {
+    "title": "t CO2-eq (Aggregate emissions) Reduced per Land Unit",
+    "filename": "t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/ha/year"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "use_weight": true,
+    "units": "t C/ha/yr"
+  },
+  "C sequestered in above-ground biomass (AGB)": {
+    "title": "C sequestered in above-ground biomass (AGB)",
+    "filename": "C_sequestered_in_above_ground_biomass_AGB.csv",
+    "stat_correction": true,
+    "units": "MgC/ha/yr"
+  },
+  "C sequestered in below-ground biomass (BGB)": {
+    "title": "C sequestered in below-ground biomass (BGB)",
+    "filename": "C_sequestered_in_below_ground_biomass_BGB.csv",
+    "stat_correction": true,
+    "units": "MgC/ha/yr"
+  },
+  "C sequestered in soil organic carbon (SOC)": {
+    "title": "C sequestered in soil organic carbon (SOC)",
+    "filename": "C_sequestered_in_soil_organic_carbon_SOC.csv",
+    "stat_correction": true,
+    "units": "MgC/ha/yr"
+  },
+  "Yield on degraded cropland": {
+    "title": "Yield on degraded cropland",
+    "filename": "Yield_on_degraded_cropland.csv",
+    "stat_correction": true
+  },
+  "Weight for financial variable on degraded area": {
+    "title": "Weight for financial variable on degraded area",
+    "filename": "Weight_for_financial_variable_on_degraded_area.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/tropicalforests/__init__.py b/solution/tropicalforests/__init__.py
index fdadecde7..1bdcb2ab6 100644
--- a/solution/tropicalforests/__init__.py
+++ b/solution/tropicalforests/__init__.py
@@ -27,65 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-            filename=None, use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-            filename=None, use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-            filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-            filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-            filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-            use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-            filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-            filename=None, use_weight=False),
-    'Percent of Degraded Land Suitable for Intact Tropical Forest Restoration': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Percent_of_Degraded_Land_Suitable_for_Intact_Tropical_Forest_Restoration.csv"),
-            use_weight=False),
-    'Root:shoot ratio of degraded forest': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Root_shoot_ratio_of_degraded_forest.csv"),
-            use_weight=False),
-    'Start Carbon storage in Base year': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Start_Carbon_storage_in_Base_year.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/tropicalforests/vma_data/vma_sources.json b/solution/tropicalforests/vma_data/vma_sources.json
new file mode 100644
index 000000000..ea61f3715
--- /dev/null
+++ b/solution/tropicalforests/vma_data/vma_sources.json
@@ -0,0 +1,26 @@
+{
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Percent of Degraded Land Suitable for Intact Tropical Forest Restoration": {
+    "title": "Percent of Degraded Land Suitable for Intact Tropical Forest Restoration",
+    "filename": "Percent_of_Degraded_Land_Suitable_for_Intact_Tropical_Forest_Restoration.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Root:shoot ratio of degraded forest": {
+    "title": "Root:shoot ratio of degraded forest",
+    "filename": "Root_shoot_ratio_of_degraded_forest.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Start Carbon storage in Base year": {
+    "title": "Start Carbon storage in Base year",
+    "filename": "Start_Carbon_storage_in_Base_year.csv",
+    "stat_correction": true,
+    "units": "t C ha/yr"
+  }
+}
\ No newline at end of file
diff --git a/solution/tropicaltreestaples/__init__.py b/solution/tropicaltreestaples/__init__.py
index 3c10a1ec1..08f0bac4d 100644
--- a/solution/tropicaltreestaples/__init__.py
+++ b/solution/tropicaltreestaples/__init__.py
@@ -27,78 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-        use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_from_CONVENTIONAL_Practice.csv"),
-        use_weight=False),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-        filename=None, use_weight=False),
-    'Electricty Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Reduction Factor SOLUTION': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-        filename=None, use_weight=False),
-    'Indirect CO2 Emissions per SOLUTION Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Sequestration_Rates.csv"),
-        use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-        filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-        filename=None, use_weight=False),
-    'Yield of Annual Staple Crops': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_of_Annual_Staple_Crops.csv"),
-        use_weight=False),
-    'Yield of Perennial Staple Crops': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Yield_of_Perennial_Staple_Crops.csv"),
-        use_weight=False),
-    'C sequestered in above-ground biomass (AGB)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "C_sequestered_in_above_ground_biomass_AGB.csv"),
-        use_weight=False),
-    'Belowground Biomass (BGB)': vma.VMA(
-        filename=None, use_weight=False),
-    'Soil Organic Carbon (SOC)': vma.VMA(
-        filename=None, use_weight=False),
-    'Weight for financial variable on degraded area': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Weight_for_financial_variable_on_degraded_area.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/tropicaltreestaples/vma_data/vma_sources.json b/solution/tropicaltreestaples/vma_data/vma_sources.json
new file mode 100644
index 000000000..4c91cd199
--- /dev/null
+++ b/solution/tropicaltreestaples/vma_data/vma_sources.json
@@ -0,0 +1,66 @@
+{
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Operating Cost per Functional Unit per Annum": {
+    "title": "SOLUTION Operating Cost per Functional Unit per Annum",
+    "filename": "SOLUTION_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Yield from CONVENTIONAL Practice": {
+    "title": "Yield from CONVENTIONAL Practice",
+    "filename": "Yield_from_CONVENTIONAL_Practice.csv",
+    "stat_correction": true,
+    "units": "DM tons fodder/ha/yr"
+  },
+  "Sequestration Rates": {
+    "title": "Sequestration Rates",
+    "filename": "Sequestration_Rates.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Yield of Annual Staple Crops": {
+    "title": "Yield of Annual Staple Crops",
+    "filename": "Yield_of_Annual_Staple_Crops.csv",
+    "stat_correction": true
+  },
+  "Yield of Perennial Staple Crops": {
+    "title": "Yield of Perennial Staple Crops",
+    "filename": "Yield_of_Perennial_Staple_Crops.csv",
+    "stat_correction": true
+  },
+  "C sequestered in above-ground biomass (AGB)": {
+    "title": "C sequestered in above-ground biomass (AGB)",
+    "filename": "C_sequestered_in_above_ground_biomass_AGB.csv",
+    "stat_correction": true,
+    "units": "t C/ha/yr"
+  },
+  "Weight for financial variable on degraded area": {
+    "title": "Weight for financial variable on degraded area",
+    "filename": "Weight_for_financial_variable_on_degraded_area.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/trucks/__init__.py b/solution/trucks/__init__.py
index be7e2a589..0d60bab46 100644
--- a/solution/trucks/__init__.py
+++ b/solution/trucks/__init__.py
@@ -28,77 +28,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'Average Utilization Rate (by Weight)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Utilization_Rate_by_Weight.csv"),
-        use_weight=False),
-    'Average Long Haul Truck Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Long_Haul_Truck_Capacity.csv"),
-        use_weight=False),
-    'Average Truck Lifetime': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Average_Truck_Lifetime.csv"),
-        use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Truck",
diff --git a/solution/trucks/vma_data/vma_sources.json b/solution/trucks/vma_data/vma_sources.json
new file mode 100644
index 000000000..11e343f8d
--- /dev/null
+++ b/solution/trucks/vma_data/vma_sources.json
@@ -0,0 +1,71 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million tonne-kms"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Truck"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "million tonne-kms/Truck"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "million tonne-kms/Truck"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "million tonne-kms/Truck/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "million tonne-kms/Truck/year"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/million tonne-kms"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Average Utilization Rate (by Weight)": {
+    "title": "Average Utilization Rate (by Weight)",
+    "filename": "Average_Utilization_Rate_by_Weight.csv",
+    "stat_correction": true
+  },
+  "Average Long Haul Truck Capacity": {
+    "title": "Average Long Haul Truck Capacity",
+    "filename": "Average_Long_Haul_Truck_Capacity.csv",
+    "stat_correction": true,
+    "units": "tonnes"
+  },
+  "Average Truck Lifetime": {
+    "title": "Average Truck Lifetime",
+    "filename": "Average_Truck_Lifetime.csv",
+    "stat_correction": true
+  },
+  "Discount Rate: Commercial / Industry": {
+    "title": "Discount Rate: Commercial / Industry",
+    "filename": "Discount_Rate_Commercial_Industry.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/walkablecities/__init__.py b/solution/walkablecities/__init__.py
index 6799701c4..082b8ab4e 100644
--- a/solution/walkablecities/__init__.py
+++ b/solution/walkablecities/__init__.py
@@ -26,95 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fuel_Efficiency_Factor.csv"),
-        use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Normal Car Occupancy': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Normal_Car_Occupancy.csv"),
-        use_weight=False),
-    'Threshold City Density for Marked Increase in Walking': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Threshold_City_Density_for_Marked_Increase_in_Walking.csv"),
-        use_weight=False),
-    'Walking Mode Share of Dense Cities': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Walking_Mode_Share_of_Dense_Cities.csv"),
-        use_weight=False),
-    'Walking Mode Share of non-dense Cities': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Walking_Mode_Share_of_non_dense_Cities.csv"),
-        use_weight=False),
-    'ICE Car Lifetime': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "ICE_Car_Lifetime.csv"),
-        use_weight=False),
-    'Discount Rates - Households': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Discount_Rates_Households.csv"),
-        use_weight=False),
-    'Car Depreciation (First) Costs': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Car_Depreciation_First_Costs.csv"),
-        use_weight=True),
-    'Car Insurance Costs': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Car_Insurance_Costs.csv"),
-        use_weight=False),
-    'Annual Rate of Urban Density Decline': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Annual_Rate_of_Urban_Density_Decline.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "trip",
diff --git a/solution/walkablecities/vma_data/vma_sources.json b/solution/walkablecities/vma_data/vma_sources.json
new file mode 100644
index 000000000..aaf74c8f4
--- /dev/null
+++ b/solution/walkablecities/vma_data/vma_sources.json
@@ -0,0 +1,117 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "billion pass-km"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/trip"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "billion pass-km/trip"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "billion pass-km/trip"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "billion pass-km/trip/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "billion pass-km/trip/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/billion pass-km"
+  },
+  "CONVENTIONAL Fixed Operating Cost (FOM)": {
+    "title": "CONVENTIONAL Fixed Operating Cost (FOM)",
+    "filename": "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US2014$/trip"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "Liter/billion pass-km"
+  },
+  "SOLUTION Fuel Efficiency Factor": {
+    "title": "SOLUTION Fuel Efficiency Factor",
+    "filename": "SOLUTION_Fuel_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "CONVENTIONAL Indirect CO2 Emissions per Unit": {
+    "title": "CONVENTIONAL Indirect CO2 Emissions per Unit",
+    "filename": "CONVENTIONAL_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/billion pass-km"
+  },
+  "Normal Car Occupancy": {
+    "title": "Normal Car Occupancy",
+    "filename": "Normal_Car_Occupancy.csv",
+    "stat_correction": true,
+    "units": "Persons/vehicle"
+  },
+  "Threshold City Density for Marked Increase in Walking": {
+    "title": "Threshold City Density for Marked Increase in Walking",
+    "filename": "Threshold_City_Density_for_Marked_Increase_in_Walking.csv",
+    "stat_correction": true
+  },
+  "Walking Mode Share of Dense Cities": {
+    "title": "Walking Mode Share of Dense Cities",
+    "filename": "Walking_Mode_Share_of_Dense_Cities.csv",
+    "stat_correction": true
+  },
+  "Walking Mode Share of non-dense Cities": {
+    "title": "Walking Mode Share of non-dense Cities",
+    "filename": "Walking_Mode_Share_of_non_dense_Cities.csv",
+    "stat_correction": true
+  },
+  "ICE Car Lifetime": {
+    "title": "ICE Car Lifetime",
+    "filename": "ICE_Car_Lifetime.csv",
+    "stat_correction": true,
+    "units": "billion pkm"
+  },
+  "Discount Rates - Households": {
+    "title": "Discount Rates - Households",
+    "filename": "Discount_Rates_Households.csv",
+    "stat_correction": true
+  },
+  "Car Depreciation (First) Costs": {
+    "title": "Car Depreciation (First) Costs",
+    "filename": "Car_Depreciation_First_Costs.csv",
+    "use_weight": true,
+    "units": "US$2014/trip"
+  },
+  "Car Insurance Costs": {
+    "title": "Car Insurance Costs",
+    "filename": "Car_Insurance_Costs.csv",
+    "stat_correction": true,
+    "units": "US$2014/trip"
+  },
+  "Annual Rate of Urban Density Decline": {
+    "title": "Annual Rate of Urban Density Decline",
+    "filename": "Annual_Rate_of_Urban_Density_Decline.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/wastetoenergy/__init__.py b/solution/wastetoenergy/__init__.py
index c4d267176..66c0353d4 100644
--- a/solution/wastetoenergy/__init__.py
+++ b/solution/wastetoenergy/__init__.py
@@ -28,96 +28,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=DATADIR.joinpath(*('energy', 'vma_CONVENTIONAL_First_Cost_per_Implementation_Unit.csv')),
-            use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=DATADIR.joinpath(*('energy', 'vma_CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit_2.csv')),
-            use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-            use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Direct_Emissions_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-            use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CH4_CO2eq_Tons_Reduced.csv"),
-            use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-            filename=DATADIR.joinpath(*('energy', 'vma_2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit_2.csv')),
-            use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-            use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-            filename=DATADIR.joinpath(*('energy', 'vma_Coal_Plant_Efficiency_2.csv')),
-            use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-            filename=DATADIR.joinpath('energy', "vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-            use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-            filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-            use_weight=False),
-    'Net Electrical Effciency (%)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Net_Electrical_Effciency.csv"),
-            use_weight=False),
-    'tN2O - CO2-eq - Emitted from Incineration': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "tN2O_CO2_eq_Emitted_from_Incineration.csv"),
-            use_weight=False),
-    'tCH4-CO2-eq - Emitted from Incineration': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "tCH4_CO2_eq_Emitted_from_Incineration.csv"),
-            use_weight=False),
-    'tCO2 per TWh - emitted from combustion': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "tCO2_per_TWh_emitted_from_combustion.csv"),
-            use_weight=False),
-    'Metal Recycling tCO2-eq/TWh reduced': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Metal_Recycling_tCO2_eq_TWh_reduced.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/wastetoenergy/vma_data/vma_sources.json b/solution/wastetoenergy/vma_data/vma_sources.json
new file mode 100644
index 000000000..1d1331eb0
--- /dev/null
+++ b/solution/wastetoenergy/vma_data/vma_sources.json
@@ -0,0 +1,99 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "use_weight": true,
+    "units": "TWh/TW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "CONVENTIONAL Fixed Operating Cost (FOM)": {
+    "title": "CONVENTIONAL Fixed Operating Cost (FOM)",
+    "filename": "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Direct Emissions per Functional Unit": {
+    "title": "SOLUTION Direct Emissions per Functional Unit",
+    "filename": "SOLUTION_Direct_Emissions_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "CH4-CO2eq Tons Reduced": {
+    "title": "CH4-CO2eq Tons Reduced",
+    "filename": "CH4_CO2eq_Tons_Reduced.csv",
+    "stat_correction": true,
+    "units": "t CH4-CO2eq per TWh"
+  },
+  "Weighted Average CONVENTIONAL Plant Efficiency": {
+    "title": "Weighted Average CONVENTIONAL Plant Efficiency",
+    "filename": "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv",
+    "use_weight": true,
+    "units": "%"
+  },
+  "Net Electrical Effciency (%)": {
+    "title": "Net Electrical Effciency (%)",
+    "filename": "Net_Electrical_Effciency.csv",
+    "stat_correction": true
+  },
+  "tN2O - CO2-eq - Emitted from Incineration": {
+    "title": "tN2O - CO2-eq - Emitted from Incineration",
+    "filename": "tN2O_CO2_eq_Emitted_from_Incineration.csv",
+    "stat_correction": true
+  },
+  "tCH4-CO2-eq - Emitted from Incineration": {
+    "title": "tCH4-CO2-eq - Emitted from Incineration",
+    "filename": "tCH4_CO2_eq_Emitted_from_Incineration.csv",
+    "stat_correction": true
+  },
+  "tCO2 per TWh - emitted from combustion": {
+    "title": "tCO2 per TWh - emitted from combustion",
+    "filename": "tCO2_per_TWh_emitted_from_combustion.csv",
+    "stat_correction": true
+  },
+  "Metal Recycling tCO2-eq/TWh reduced": {
+    "title": "Metal Recycling tCO2-eq/TWh reduced",
+    "filename": "Metal_Recycling_tCO2_eq_TWh_reduced.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/solution/waterdistribution/__init__.py b/solution/waterdistribution/__init__.py
index 503bd09ee..8e0eea722 100644
--- a/solution/waterdistribution/__init__.py
+++ b/solution/waterdistribution/__init__.py
@@ -26,94 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=True),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Energy_Efficiency_Factor.csv"),
-            use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Per Capita Water Production by Utilities': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Per_Capita_Water_Production_by_Utilities.csv"),
-            use_weight=True),
-    '% Water distributed using Gravity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Water_distributed_using_Gravity.csv"),
-            use_weight=False),
-    '% Urban population served with piped water': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Urban_population_served_with_piped_water.csv"),
-            use_weight=True),
-    '% Rural population served with piped water': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Rural_population_served_with_piped_water.csv"),
-            use_weight=True),
-    '% of Electricity based pumping using SURFACE source of water': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "of_Electricity_based_pumping_using_SURFACE_source_of_water.csv"),
-            use_weight=False),
-    '% of Electricity based pumping using GROUND source of water (or from lower altitudes)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "of_Electricity_based_pumping_using_GROUND_source_of_water_or_from_lower_altitudes.csv"),
-            use_weight=False),
-    '% of Electricity based pumping using  DESALINATION(or energy intensive methods)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "of_Electricity_based_pumping_using_DESALINATION_or_energy_intensive_methods.csv"),
-            use_weight=False),
-    'Non Revenue Water': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Non_Revenue_Water.csv"),
-            use_weight=False),
-    'Real Losses Saved from Solution': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Real_Losses_Saved_from_Solution.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Million m3 Produced with Pressure Management and Active Leak Control",
diff --git a/solution/waterdistribution/vma_data/vma_sources.json b/solution/waterdistribution/vma_data/vma_sources.json
new file mode 100644
index 000000000..eba729b31
--- /dev/null
+++ b/solution/waterdistribution/vma_data/vma_sources.json
@@ -0,0 +1,110 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Million m3 of Water produced"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Million m3 Produced with Pressure Management and Active Leak Control"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "years"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "years"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "years"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "years"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Million m3 of Water produced"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Million m3 of Water produced"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "use_weight": true,
+    "units": "TWh/Million m3 of Water produced"
+  },
+  "SOLUTION Energy Efficiency Factor": {
+    "title": "SOLUTION Energy Efficiency Factor",
+    "filename": "SOLUTION_Energy_Efficiency_Factor.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Per Capita Water Production by Utilities": {
+    "title": "Per Capita Water Production by Utilities",
+    "filename": "Per_Capita_Water_Production_by_Utilities.csv",
+    "use_weight": true,
+    "units": "million m3/person/year"
+  },
+  "% Water distributed using Gravity": {
+    "title": "% Water distributed using Gravity",
+    "filename": "Water_distributed_using_Gravity.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "% Urban population served with piped water": {
+    "title": "% Urban population served with piped water",
+    "filename": "Urban_population_served_with_piped_water.csv",
+    "use_weight": true
+  },
+  "% Rural population served with piped water": {
+    "title": "% Rural population served with piped water",
+    "filename": "Rural_population_served_with_piped_water.csv",
+    "use_weight": true
+  },
+  "% of Electricity based pumping using SURFACE source of water": {
+    "title": "% of Electricity based pumping using SURFACE source of water",
+    "filename": "of_Electricity_based_pumping_using_SURFACE_source_of_water.csv",
+    "stat_correction": true
+  },
+  "% of Electricity based pumping using GROUND source of water (or from lower altitudes)": {
+    "title": "% of Electricity based pumping using GROUND source of water (or from lower altitudes)",
+    "filename": "of_Electricity_based_pumping_using_GROUND_source_of_water_or_from_lower_altitudes.csv",
+    "stat_correction": true
+  },
+  "% of Electricity based pumping using  DESALINATION(or energy intensive methods)": {
+    "title": "% of Electricity based pumping using  DESALINATION(or energy intensive methods)",
+    "filename": "of_Electricity_based_pumping_using_DESALINATION_or_energy_intensive_methods.csv",
+    "stat_correction": true
+  },
+  "Non Revenue Water": {
+    "title": "Non Revenue Water",
+    "filename": "Non_Revenue_Water.csv",
+    "stat_correction": true
+  },
+  "Real Losses Saved from Solution": {
+    "title": "Real Losses Saved from Solution",
+    "filename": "Real_Losses_Saved_from_Solution.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/waterefficiency/__init__.py b/solution/waterefficiency/__init__.py
index 3379ac3ca..3be0d9c20 100644
--- a/solution/waterefficiency/__init__.py
+++ b/solution/waterefficiency/__init__.py
@@ -26,88 +26,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-            use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-            use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-            use_weight=False),
-    'SOLUTION Average Annual Use': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-            use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv"),
-            use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Revenue per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Installation Cost for Fixtures': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Installation_Cost_for_Fixtures.csv"),
-            use_weight=True),
-    'Gini Coefficient for GDP per Capita': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Gini_Coefficient_for_GDP_per_Capita.csv"),
-            use_weight=False),
-    'Percentage of Water Saved (Perc. Of Annual Domestic Water Demand)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Percentage_of_Water_Saved_Perc_Of_Annual_Domestic_Water_Demand.csv"),
-            use_weight=False),
-    'Number of Low-Flow Taps per Person': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Number_of_Low_Flow_Taps_per_Person.csv"),
-            use_weight=False),
-    'Number of Low-Flow Showerheads per Person': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Number_of_Low_Flow_Showerheads_per_Person.csv"),
-            use_weight=False),
-    'Persons per Household': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Persons_per_Household.csv"),
-            use_weight=True),
-    'Purchase & Install Cost of Conventional Fixtures': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Purchase_Install_Cost_of_Conventional_Fixtures.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": "Million Low Flow Fixtures",
diff --git a/solution/waterefficiency/vma_data/vma_sources.json b/solution/waterefficiency/vma_data/vma_sources.json
new file mode 100644
index 000000000..b34362489
--- /dev/null
+++ b/solution/waterefficiency/vma_data/vma_sources.json
@@ -0,0 +1,104 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "Giga-Liter Water"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US2014$/Million Low Flow Fixtures"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Million Low Flow Fixtures"
+  },
+  "CONVENTIONAL Lifetime Capacity": {
+    "title": "CONVENTIONAL Lifetime Capacity",
+    "filename": "CONVENTIONAL_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Giga-Liter Water/Million Low Flow Fixtures"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "Giga-Liter Water/Million Low Flow Fixtures"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Giga-Liter Water/Million Low Flow Fixtures/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "Giga-Liter Water/Million Low Flow Fixtures/year"
+  },
+  "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US2014$/Giga-Liter Water"
+  },
+  "CONVENTIONAL Total Energy Used per Functional Unit": {
+    "title": "CONVENTIONAL Total Energy Used per Functional Unit",
+    "filename": "CONVENTIONAL_Total_Energy_Used_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TWh/Giga-Liter Water"
+  },
+  "CONVENTIONAL Fuel Consumed per Functional Unit": {
+    "title": "CONVENTIONAL Fuel Consumed per Functional Unit",
+    "filename": "CONVENTIONAL_Fuel_Consumed_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "TJ/Giga-Liter Water"
+  },
+  "Installation Cost for Fixtures": {
+    "title": "Installation Cost for Fixtures",
+    "filename": "Installation_Cost_for_Fixtures.csv",
+    "use_weight": true,
+    "units": "US$/million low flow fixtures"
+  },
+  "Gini Coefficient for GDP per Capita": {
+    "title": "Gini Coefficient for GDP per Capita",
+    "filename": "Gini_Coefficient_for_GDP_per_Capita.csv",
+    "stat_correction": true,
+    "units": "(ratio)"
+  },
+  "Percentage of Water Saved (Perc. Of Annual Domestic Water Demand)": {
+    "title": "Percentage of Water Saved (Perc. Of Annual Domestic Water Demand)",
+    "filename": "Percentage_of_Water_Saved_Perc_Of_Annual_Domestic_Water_Demand.csv",
+    "stat_correction": true,
+    "units": "Percent"
+  },
+  "Number of Low-Flow Taps per Person": {
+    "title": "Number of Low-Flow Taps per Person",
+    "filename": "Number_of_Low_Flow_Taps_per_Person.csv",
+    "stat_correction": true,
+    "units": "domestic taps per person"
+  },
+  "Number of Low-Flow Showerheads per Person": {
+    "title": "Number of Low-Flow Showerheads per Person",
+    "filename": "Number_of_Low_Flow_Showerheads_per_Person.csv",
+    "stat_correction": true,
+    "units": "domestic showerheads per person"
+  },
+  "Persons per Household": {
+    "title": "Persons per Household",
+    "filename": "Persons_per_Household.csv",
+    "use_weight": true,
+    "units": "persons per HH"
+  },
+  "Purchase & Install Cost of Conventional Fixtures": {
+    "title": "Purchase & Install Cost of Conventional Fixtures",
+    "filename": "Purchase_Install_Cost_of_Conventional_Fixtures.csv",
+    "stat_correction": true,
+    "units": "US$2014/million fixtures"
+  }
+}
\ No newline at end of file
diff --git a/solution/waveandtidal/__init__.py b/solution/waveandtidal/__init__.py
index 988f0a456..fadec4698 100644
--- a/solution/waveandtidal/__init__.py
+++ b/solution/waveandtidal/__init__.py
@@ -27,86 +27,8 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-        use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=True),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_First_Cost_per_Implementation_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Lifetime Capacity': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Lifetime_Capacity.csv"),
-        use_weight=True),
-    'SOLUTION Lifetime Capacity': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Lifetime_Capacity.csv"),
-        use_weight=False),
-    'CONVENTIONAL Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Average_Annual_Use.csv"),
-        use_weight=True),
-    'SOLUTION Average Annual Use': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Average_Annual_Use.csv"),
-        use_weight=False),
-    'CONVENTIONAL Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=True),
-    'SOLUTION Variable Operating Cost (VOM) per Functional Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv"),
-        use_weight=False),
-    'CONVENTIONAL Fixed Operating Cost (FOM)': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "CONVENTIONAL_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=True),
-    'SOLUTION Fixed Operating Cost (FOM)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Fixed_Operating_Cost_FOM.csv"),
-        use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'Total Energy Used per SOLUTION functional unit': vma.VMA(
-        filename=None, use_weight=False),
-    'Fuel Consumed per CONVENTIONAL Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Direct Emissions per Functional Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'CONVENTIONAL Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=None, use_weight=False),
-    'SOLUTION Indirect CO2 Emissions per Unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv"),
-        use_weight=False),
-    'CH4-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    'N2O-CO2eq Tons Reduced': vma.VMA(
-        filename=None, use_weight=False),
-    '2005-2014 Average CONVENTIONAL Fuel Price per functional unit': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv"),
-        use_weight=True),
-    'Weighted Average CONVENTIONAL Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Weighted_Average_CONVENTIONAL_Plant_Efficiency.csv"),
-        use_weight=True),
-    'Coal Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Coal_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Natural Gas Plant Efficiency': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Natural_Gas_Plant_Efficiency.csv"),
-        use_weight=False),
-    'Oil Plant Efficiency': vma.VMA(
-        filename=DATADIR.joinpath(*('energy', 'vma_Oil_Plant_Efficiency_2.csv')),
-        use_weight=False),
-    'Learning Rates (%)': vma.VMA(
-        filename=THISDIR.joinpath("vma_data", "Learning_Rates.csv"),
-        use_weight=False),
-    'Discount Rate: Commercial / Industry': vma.VMA(
-        filename=DATADIR.joinpath('energy', "vma_data", "Discount_Rate_Commercial_Industry.csv"),
-        use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = (vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json') |
+        vma.VMA.load_vma_directory(DATADIR/'energy/vma_data/vma_sources.json'))
 
 units = {
     "implementation unit": "TW",
diff --git a/solution/waveandtidal/vma_data/vma_sources.json b/solution/waveandtidal/vma_data/vma_sources.json
new file mode 100644
index 000000000..7810542e8
--- /dev/null
+++ b/solution/waveandtidal/vma_data/vma_sources.json
@@ -0,0 +1,80 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "TWh"
+  },
+  "CONVENTIONAL First Cost per Implementation Unit": {
+    "title": "CONVENTIONAL First Cost per Implementation Unit",
+    "filename": "CONVENTIONAL_First_Cost_per_Implementation_Unit.csv",
+    "use_weight": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION First Cost per Implementation Unit": {
+    "title": "SOLUTION First Cost per Implementation Unit",
+    "filename": "SOLUTION_First_Cost_per_Implementation_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Lifetime Capacity": {
+    "title": "SOLUTION Lifetime Capacity",
+    "filename": "SOLUTION_Lifetime_Capacity.csv",
+    "stat_correction": true,
+    "units": "TWh/TW"
+  },
+  "CONVENTIONAL Average Annual Use": {
+    "title": "CONVENTIONAL Average Annual Use",
+    "filename": "CONVENTIONAL_Average_Annual_Use.csv",
+    "use_weight": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Average Annual Use": {
+    "title": "SOLUTION Average Annual Use",
+    "filename": "SOLUTION_Average_Annual_Use.csv",
+    "stat_correction": true,
+    "units": "TWh/TW/year"
+  },
+  "SOLUTION Variable Operating Cost (VOM) per Functional Unit": {
+    "title": "SOLUTION Variable Operating Cost (VOM) per Functional Unit",
+    "filename": "SOLUTION_Variable_Operating_Cost_VOM_per_Functional_Unit.csv",
+    "stat_correction": true,
+    "units": "US$2014/kWh"
+  },
+  "SOLUTION Fixed Operating Cost (FOM)": {
+    "title": "SOLUTION Fixed Operating Cost (FOM)",
+    "filename": "SOLUTION_Fixed_Operating_Cost_FOM.csv",
+    "stat_correction": true,
+    "units": "US$2014/kW"
+  },
+  "SOLUTION Indirect CO2 Emissions per Unit": {
+    "title": "SOLUTION Indirect CO2 Emissions per Unit",
+    "filename": "SOLUTION_Indirect_CO2_Emissions_per_Unit.csv",
+    "stat_correction": true,
+    "units": "t CO2-eq/TWh"
+  },
+  "2005-2014 Average CONVENTIONAL Fuel Price per functional unit": {
+    "title": "2005-2014 Average CONVENTIONAL Fuel Price per functional unit",
+    "filename": "2005_2014_Average_CONVENTIONAL_Fuel_Price_per_functional_unit.csv",
+    "use_weight": true,
+    "units": "$US2014/kWh"
+  },
+  "Coal Plant Efficiency": {
+    "title": "Coal Plant Efficiency",
+    "filename": "Coal_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Natural Gas Plant Efficiency": {
+    "title": "Natural Gas Plant Efficiency",
+    "filename": "Natural_Gas_Plant_Efficiency.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Learning Rates (%)": {
+    "title": "Learning Rates (%)",
+    "filename": "Learning_Rates.csv",
+    "stat_correction": true,
+    "units": "%"
+  }
+}
\ No newline at end of file
diff --git a/solution/womensmallholders/__init__.py b/solution/womensmallholders/__init__.py
index 682419912..a221bfd59 100644
--- a/solution/womensmallholders/__init__.py
+++ b/solution/womensmallholders/__init__.py
@@ -27,74 +27,7 @@
 
 DATADIR = pathlib.Path(__file__).parents[2].joinpath('data')
 THISDIR = pathlib.Path(__file__).parents[0]
-VMAs = {
-    'Current Adoption': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Current_Adoption.csv"),
-            use_weight=False),
-    'CONVENTIONAL First Cost per Implementation Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION First Cost per Implementation Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Operating Cost per Functional Unit per Annum': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv"),
-            use_weight=True),
-    'SOLUTION Operating Cost per Functional Unit per Annum': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Net Profit Margin per Functional Unit per Annum': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-            use_weight=True),
-    'SOLUTION Net Profit Margin per Functional Unit per Annum': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv"),
-            use_weight=False),
-    'Yield from CONVENTIONAL Practice': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Yield_from_CONVENTIONAL_Practice.csv"),
-            use_weight=True),
-    'Yield Gain (% Increase from CONVENTIONAL to SOLUTION)': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv"),
-            use_weight=False),
-    'CONVENTIONAL Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Energy Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Total Energy Used per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'CONVENTIONAL Fuel Consumed per Functional Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'SOLUTION Fuel Efficiency Factor': vma.VMA(
-            filename=None, use_weight=False),
-    't CO2-eq (Aggregate emissions) Reduced per Land Unit': vma.VMA(
-            filename=DATADIR.joinpath(*('land', 'vma_t_CO2_eq_Aggregate_emissions_Reduced_per_Land_Unit.csv')),
-            use_weight=False),
-    't CO2 Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    't N2O-CO2-eq Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    't CH4-CO2-eq Reduced per Land Unit': vma.VMA(
-            filename=None, use_weight=False),
-    'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE': vma.VMA(
-            filename=None, use_weight=False),
-    'Indirect CO2 Emissions per  Implementation Unit - SOLUTION': vma.VMA(
-            filename=None, use_weight=False),
-    'Sequestration Rates': vma.VMA(
-            filename=None, use_weight=False),
-    'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing': vma.VMA(
-            filename=None, use_weight=False),
-    'Disturbance Rate': vma.VMA(
-            filename=None, use_weight=False),
-    'Forest Degradation Rate': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Forest_Degradation_Rate.csv"),
-            use_weight=False),
-    'Percent Women Force in Agriculture': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Percent_Women_Force_in_Agriculture.csv"),
-            use_weight=False),
-    'Percent Women Farmholders in Agriculture': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Percent_Women_Farmholders_in_Agriculture.csv"),
-            use_weight=False),
-    'Avoided Deforested Area With Increase in Agricultural Intensification': vma.VMA(
-            filename=THISDIR.joinpath("vma_data", "Avoided_Deforested_Area_With_Increase_in_Agricultural_Intensification.csv"),
-            use_weight=False),
-}
-vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))
+VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data/vma_sources.json')
 
 units = {
     "implementation unit": None,
diff --git a/solution/womensmallholders/vma_data/vma_sources.json b/solution/womensmallholders/vma_data/vma_sources.json
new file mode 100644
index 000000000..d09b6228b
--- /dev/null
+++ b/solution/womensmallholders/vma_data/vma_sources.json
@@ -0,0 +1,59 @@
+{
+  "Current Adoption": {
+    "title": "Current Adoption",
+    "filename": "Current_Adoption.csv",
+    "stat_correction": true,
+    "units": "million hectares"
+  },
+  "CONVENTIONAL Operating Cost per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Operating Cost per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Operating_Cost_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "CONVENTIONAL Net Profit Margin per Functional Unit per Annum": {
+    "title": "CONVENTIONAL Net Profit Margin per Functional Unit per Annum",
+    "filename": "CONVENTIONAL_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "use_weight": true,
+    "units": "US$2014/ha/yr"
+  },
+  "SOLUTION Net Profit Margin per Functional Unit per Annum": {
+    "title": "SOLUTION Net Profit Margin per Functional Unit per Annum",
+    "filename": "SOLUTION_Net_Profit_Margin_per_Functional_Unit_per_Annum.csv",
+    "stat_correction": true,
+    "units": "US$2014/ha/yr"
+  },
+  "Yield from CONVENTIONAL Practice": {
+    "title": "Yield from CONVENTIONAL Practice",
+    "filename": "Yield_from_CONVENTIONAL_Practice.csv",
+    "use_weight": true,
+    "units": "kg/ha/yr"
+  },
+  "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)": {
+    "title": "Yield Gain (% Increase from CONVENTIONAL to SOLUTION)",
+    "filename": "Yield_Gain_Increase_from_CONVENTIONAL_to_SOLUTION.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Forest Degradation Rate": {
+    "title": "Forest Degradation Rate",
+    "filename": "Forest_Degradation_Rate.csv",
+    "stat_correction": true
+  },
+  "Percent Women Force in Agriculture": {
+    "title": "Percent Women Force in Agriculture",
+    "filename": "Percent_Women_Force_in_Agriculture.csv",
+    "stat_correction": true,
+    "units": "%"
+  },
+  "Percent Women Farmholders in Agriculture": {
+    "title": "Percent Women Farmholders in Agriculture",
+    "filename": "Percent_Women_Farmholders_in_Agriculture.csv",
+    "stat_correction": true
+  },
+  "Avoided Deforested Area With Increase in Agricultural Intensification": {
+    "title": "Avoided Deforested Area With Increase in Agricultural Intensification",
+    "filename": "Avoided_Deforested_Area_With_Increase_in_Agricultural_Intensification.csv",
+    "stat_correction": true
+  }
+}
\ No newline at end of file
diff --git a/tools/export_csv.vb b/tools/export_csv.vb
index b06503635..b72efe807 100644
--- a/tools/export_csv.vb
+++ b/tools/export_csv.vb
@@ -125,3 +125,31 @@ Sub Generate_Scenario_Records()
 End Sub
 
 
+' From https://stackoverflow.com/a/6688482/1539989
+Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
+    Dim sht As Worksheet
+
+    If wb Is Nothing Then Set wb = ThisWorkbook
+    On Error Resume Next
+    Set sht = wb.Sheets(shtName)
+    On Error GoTo 0
+    WorksheetExists = Not sht Is Nothing
+End Function
+
+' Code a couple of Denton's Fixes
+
+Sub do_fixes()
+    ' Replace "Middle East & Africa" with "Middle East and Africa"
+    Sheets("Unit Adoption Calculations").UsedRange.Replace What:="Middle East & Africa", Replacement:="Middle East and Africa"
+
+    ' Fix the mistaken denominator in Land CO2 calcs.   $Hxx --> $Jxx
+    If WorksheetExists("AEZ Data") Then
+        Sheets("CO2 Calcs").Range("B121:AF166").Replace What:="/'AEZ Data'!$H", Replacement:="/'AEZ Data'!$J", LookAt:=xlPart
+    End If
+
+End Sub
+
+Sub do_all()
+    Call do_fixes
+    Call Generate_Scenario_Records
+End Sub
diff --git a/tools/solution_xls_extract.py b/tools/solution_xls_extract.py
index 85aa55ee9..49c8c74d2 100755
--- a/tools/solution_xls_extract.py
+++ b/tools/solution_xls_extract.py
@@ -1527,30 +1527,19 @@ def extract_vmas(f, wb, outputdir):
     vma_r = VMAReader(wb)
     vmas = vma_r.read_xls(csv_path=vma_dir_path)
     vma_name_to_dict = {}
-    f.write("VMAs = {\n")
+    f.write("VMAs = vma.VMA.load_vma_directory(THISDIR/'vma_data'/'vma_sources.json')\n")
     for _, row in vmas.iterrows():
         vma_name = row['Title on xls']
-        f.write(f"    '{vma_name}': vma.VMA(\n")
         filename = row['Filename']
+        if not isinstance(filename, str):
+            continue
         vma_out_dict = {}
-        if not filename:
-            f.write(f"        filename=None, use_weight={row['Use weight?']}),\n")
-        else:
-            if isinstance(filename, str):
-                path = f'THISDIR.joinpath("vma_data", "{filename}")'
-                vma_out_dict["filename"] = filename
-            else:
-                path = f'DATADIR.joinpath(*{filename})'
-            f.write(f"        filename={path},\n")
-            f.write(f"        use_weight={row['Use weight?']}),\n")
+        vma_out_dict["filename"] = filename
+        vma_out_dict['use_weight'] = row['Use weight?']
         vma_out_dict["bound_correction"] = row['Bound correction?']
         vma_out_dict["description"] = row['Description']
-        if "filename" in vma_out_dict:
-            vma_name_to_dict[vma_name] = vma_out_dict
-    f.write("}\n")
-    f.write("vma.populate_fixed_summaries(vma_dict=VMAs, filename=THISDIR.joinpath('vma_data', 'VMA_info.csv'))\n\n")
-    if vma_name_to_dict:
-        write_json(filename=pathlib.Path(vma_dir_path) / 'vma_sources.json',
+        vma_name_to_dict[vma_name] = vma_out_dict
+    write_json(filename=pathlib.Path(vma_dir_path) / 'vma_sources.json',
                    d=vma_name_to_dict)
 
 


Test patch:
diff --git a/model/tests/data/VMA_info.csv b/model/tests/data/VMA_info.csv
deleted file mode 100644
index f9f44855d..000000000
--- a/model/tests/data/VMA_info.csv
+++ /dev/null
@@ -1,4 +0,0 @@
-VMA number,Filename,Title on xls,Has data?,Use weight?,Fixed Mean,Fixed High,Fixed Low
-1,vma1_silvopasture,Current Adoption,True,False,,,
-2,CONVENTIONAL_First_Cost_per_Implementation_Unit_for_replaced_practices_technologies,CONVENTIONAL First Cost per Implementation Unit for replaced practices/technologies,False,False,,,
-3,vma3_silvopasture_fixed_summary,Testing Fixed Summary,True,False,2.0,3.0,1.0
diff --git a/model/tests/data/VMA_info_w_summary.csv b/model/tests/data/VMA_info_w_summary.csv
deleted file mode 100644
index 357cd2648..000000000
--- a/model/tests/data/VMA_info_w_summary.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-VMA number,Title on xls,Fixed Mean,Fixed High,Fixed Low
-1,Testing Fixed Summary,2.0,3.0,1.0
diff --git a/model/tests/test_vma.py b/model/tests/test_vma.py
index d4f98b5fb..b3eee3e3f 100644
--- a/model/tests/test_vma.py
+++ b/model/tests/test_vma.py
@@ -23,99 +23,6 @@ def test_vals_from_real_soln_csv():
     assert result == pytest.approx(expected)
 
 
-@pytest.mark.slow
-class TestVMAFromXlsx:
-    def test_no_title(self):
-        """Check that the default title (None) raises an error."""
-        with pytest.raises(ValueError) as error:
-            vma.VMA(filename=datadir.joinpath('silvopasture.xlsx'))
-        assert 'Title None not available' in error.exconly()
-
-    def test_bad_title(self):
-        """Check that a nonexistent title raises an error."""
-        with pytest.raises(ValueError) as error:
-            vma.VMA(filename=datadir.joinpath('silvopasture.xlsx'),
-                    title='Not a real title')
-        assert "Title 'Not a real title' not available" in error.exconly()
-
-    @pytest.mark.parametrize('title,expected', (
-        ('Current Adoption',
-         (314.150, 450.0, 178.3)),
-        ('SOLUTION First Cost per Implementation Unit',
-         (462.45300593, 713.74365784, 211.16235403)),
-        ('CONVENTIONAL Operating Cost per Functional Unit per Annum',
-         (328.41585777, 706.18860047, -49.35688493)),
-        ('SOLUTION Operating Cost per Functional Unit per Annum',
-         (837.64313091, 1694.62599661, -19.33973480)),
-        ('CONVENTIONAL Net Profit Margin per Functional Unit per Annum',
-         (143.54391845, 231.31902470, 55.76881221)),
-        ('SOLUTION Net Profit Margin per Functional Unit per Annum',
-         (460.21969692, 732.99682009, 187.44257376)),
-        ('Yield from CONVENTIONAL Practice',
-         (3.42857143, 5.08534479, 1.77179807)),
-        ('Yield Gain (% Increase from CONVENTIONAL to SOLUTION)',
-         (0.10054497, 0.18294670, 0.01814324)),
-        ('t CH4-CO2-eq Reduced per Land Unit',
-         (0.0, 0.0, 0.0)),
-        ('Sequestration Rates',
-         (4.64561688, 8.24249349, 1.04874028)),
-        ('Percent silvopasture area to the total grassland area (including potential)',
-         (0.24150576, 0.36171938, 0.12129214)),
-    ))
-    @pytest.mark.parametrize('filetype', ('xlsx', 'xlsm'))
-    def test_vals(self, filetype, title, expected):
-        """
-        Checks known values from Silvopasture Variable Meta Analysis, taken
-        from the xlsx file.
-        """
-        v = vma.VMA(filename=datadir.joinpath(f'silvopasture.{filetype}'),
-                    title=title,
-                    low_sd=1.0,
-                    high_sd=1.0)
-        assert v.avg_high_low() == pytest.approx(expected)
-
-    @pytest.mark.parametrize('title', (
-        'CONVENTIONAL First Cost per Implementation Unit',
-        'Electricty Consumed per CONVENTIONAL Functional Unit',
-        'SOLUTION Energy Efficiency Factor',
-        'Total Energy Used per SOLUTION functional unit',
-        'Fuel Consumed per CONVENTIONAL Functional Unit',
-        'Fuel Reduction Factor SOLUTION',
-        't CO2-eq (Aggregate emissions) Reduced per Land Unit',
-        't CO2 Reduced per Land Unit',
-        't N2O-CO2-eq Reduced per Land Unit',
-        'Indirect CO2 Emissions per CONVENTIONAL Implementation OR functional Unit -- CHOOSE ONLY ONE',
-        'Indirect CO2 Emissions per SOLUTION Implementation Unit',
-        'Indirect CO2 Emissions per SOLUTION Implementation Unit',
-        'Sequestered Carbon NOT Emitted after Cyclical Harvesting/Clearing',
-        'Indirect CO2 Emissions per SOLUTION Implementation Unit',
-        'Disturbance Rate',
-        'Indirect CO2 Emissions per SOLUTION Implementation Unit',
-    ))
-    @pytest.mark.parametrize('filetype', ('xlsx', 'xlsm'))
-    def test_empty_vmas(self, filetype, title):
-        """
-        Check that existing titles with no data raise an error. Titles taken
-        from the test xlsx file.
-        """
-        filename = f'silvopasture.{filetype}'
-        with pytest.raises(ValueError) as error:
-            vma.VMA(filename=datadir.joinpath(filename),
-                    title=title)
-        assert filename in error.exconly()
-        assert title in error.exconly()
-        assert 'is that VMA empty?' in error.exconly()
-
-
-def test_check_fixed_summary():
-    # Check that None/NaN values give an empty result
-    assert vma.check_fixed_summary(None, None, None) is None
-    assert vma.check_fixed_summary(None, 1.1, 50) is None
-    assert vma.check_fixed_summary(-4.3, np.nan, 50) is None
-    # Check that we get a tuple of the given values back
-    assert vma.check_fixed_summary(-4.3, 1.1, 50) == (-4.3, 1.1, 50)
-
-
 def test_source_data():
     s = """Source ID, Raw Data Input, Original Units, Conversion calculation, Common Units, Weight, Exclude Data?, Thermal-Moisture Regime, World / Drawdown Region
         Check that this text is present, 0%, %, 0, 0
@@ -252,18 +159,6 @@ def test_avg_high_low_exclude():
     assert v.avg_high_low()[0] == pytest.approx(4.64561688311688)
 
 
-def test_populate_fixed_summary():
-    VMAs = {
-      'Testing Fixed Summary': vma.VMA(
-          filename=datadir.joinpath("vma1_silvopasture.csv"),
-          use_weight=False),
-      }
-    vma.populate_fixed_summaries(vma_dict=VMAs, filename=datadir.joinpath('VMA_info_w_summary.csv'))
-    v = VMAs['Testing Fixed Summary']
-    (avg, high, low) = v.avg_high_low()
-    assert (avg, high, low) == (2.0, 3.0, 1.0)
-
-
 def test_avg_high_low_by_regime():
     f = io.StringIO("""Source ID, Raw Data Input, Original Units, Conversion calculation, Common Units, Weight, Exclude Data?, Thermal-Moisture Regime, World / Drawdown Region
       A, 0.4, Mha,,, 1.0, False, Temperate/Boreal-Humid
@@ -385,11 +280,6 @@ def test_no_filename():
     assert pd.isna(high)
     assert pd.isna(low)
 
-def test_bad_filetype():
-    with pytest.raises(ValueError) as error:
-        vma.VMA(filename='file.bad')
-    assert 'file.bad' in error.exconly()
-    assert 'not a recognized filetype for vma.VMA' in error.exconly()
 
 def test_invalid_percent_range():
     # Taken from solution/ships/vma_data/Learning_Rate.csv, '10-15%' cannot be converted to float.