diff --git a/data/shockDistributions.csv b/data/shockDistributions.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0ff6362b4513739d78c9f44a124b9006d3426c0c
--- /dev/null
+++ b/data/shockDistributions.csv
@@ -0,0 +1,23 @@
+shock,pname,min,max,type
+protectionism,TRADE_BARRIERS_MULTIPLIER,0.1,0.2,additive
+protectionism ,TRANSPORT_COST,0.5,1,multiplicative
+protectionism ,TRANSPORT_LOSSES,0.05,0.1,additive
+automation,TRANSPORT_COST,-0.25,-0.5,multiplicative
+automation,TRANSPORT_LOSSES,-0.05,-0.1,additive
+automation,TECHNOLOGY_CHANGE_ANNUAL_RATE,0.002,0.004,additive
+automation,MEAT_EFFICIENCY,0.025,0.05,additive
+automation,FERTILISER_COST_PER_T,-0.25,-0.5,multiplicative
+automation,OTHER_INTENSITY_COST,-0.25,-0.5,multiplicative
+automation,IRRIG_COST_MULTIPLIER,-0.25,-0.5,additive
+automation,IRRIG_EFF_MULTIPLIER,0.1,0.2,additive
+diet,RUMINANT_CHANGE_ANNUAL_RATE,0.4,0.6,additive
+diet,MONOGASTRIC_CHANGE_ANNUAL_RATE,0.4,0.6,additive
+cyber,TRANSPORT_COST,0.5,1,multiplicative
+cyber,TRANSPORT_LOSSES,0.1,0.2,additive
+cyber,TECHNOLOGY_CHANGE_ANNUAL_RATE,-0.002,-0.004,additive
+cyber,MEAT_EFFICIENCY,-0.025,-0.05,additive
+cyber,FERTILISER_COST_PER_T,0.25,0.5,multiplicative
+cyber,OTHER_INTENSITY_COST,0.25,0.5,multiplicative
+cyber,IRRIG_COST_MULTIPLIER,0.25,0.5,additive
+cyber,IRRIG_EFF_MULTIPLIER,-0.1,-0.2,additive
+financial,FINANCIAL_SPECULATION_MULTIPLIER,0.5,1,additive
diff --git a/data/shockProbabilities.csv b/data/shockProbabilities.csv
new file mode 100644
index 0000000000000000000000000000000000000000..98a6ef059e752606e22604c7258a1eb9609f9331
--- /dev/null
+++ b/data/shockProbabilities.csv
@@ -0,0 +1,6 @@
+ssp,protectionism,automation,diet,climate,cyber,financial
+SSP1,0.1,0.5,0.9,0.01,0.05,0.01
+SSP2,0.7,0.5,0.3,0.07,0.05,0.03
+SSP3,0.9,0.1,0.1,0.07,0.01,0.09
+SSP4,0.3,0.7,0.3,0.09,0.07,0.05
+SSP5,0.1,0.9,0.1,0.09,0.09,0.03
diff --git a/data/sims/shocks_params.csv b/data/sims/shocks_params.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9582d147843a5156eae7e792d7acce969adb3097
--- /dev/null
+++ b/data/sims/shocks_params.csv
@@ -0,0 +1,151 @@
+Ensemble,pname,dist,xmin,xmax,x05,xmode,x95,value
+SSP1,AGRI_LAND_EXPANSION_COST_FACTOR,beta,0,2,1.2,1.4,1.8,
+SSP2,AGRI_LAND_EXPANSION_COST_FACTOR,beta,0,2,0.8,1,1.2,
+SSP3,AGRI_LAND_EXPANSION_COST_FACTOR,beta,0,2,0.3,0.5,0.8,
+SSP4,AGRI_LAND_EXPANSION_COST_FACTOR,beta,0,2,0.5,0.8,1,
+SSP5,AGRI_LAND_EXPANSION_COST_FACTOR,beta,0,2,0.5,0.8,1.2,
+SSP1,ANNUAL_MAX_IMPORT_CHANGE,beta,0.008,0.032,0.02,0.023,0.026,
+SSP2,ANNUAL_MAX_IMPORT_CHANGE,beta,0.008,0.032,0.017,0.02,0.023,
+SSP3,ANNUAL_MAX_IMPORT_CHANGE,beta,0.008,0.032,0.011,0.014,0.017,
+SSP4,ANNUAL_MAX_IMPORT_CHANGE,beta,0.008,0.032,0.014,0.017,0.02,
+SSP5,ANNUAL_MAX_IMPORT_CHANGE,beta,0.008,0.032,0.023,0.026,0.029,
+SSP1,BIOENERGY_DEMAND_SHIFT,unif,0.9,1.1,,,,
+SSP2,BIOENERGY_DEMAND_SHIFT,unif,0.9,1.1,,,,
+SSP3,BIOENERGY_DEMAND_SHIFT,unif,0.9,1.1,,,,
+SSP4,BIOENERGY_DEMAND_SHIFT,unif,0.9,1.1,,,,
+SSP5,BIOENERGY_DEMAND_SHIFT,unif,0.9,1.1,,,,
+SSP1,CROP_TO_PASTURE_COST_FACTOR,unif,0.8,1.2,,,,
+SSP2,CROP_TO_PASTURE_COST_FACTOR,unif,0.8,1.2,,,,
+SSP3,CROP_TO_PASTURE_COST_FACTOR,unif,0.8,1.2,,,,
+SSP4,CROP_TO_PASTURE_COST_FACTOR,unif,0.8,1.2,,,,
+SSP5,CROP_TO_PASTURE_COST_FACTOR,unif,0.8,1.2,,,,
+SSP1,FERTILISER_COST_PER_T,beta,0.2,2.6,1.4,2,2.3,
+SSP2,FERTILISER_COST_PER_T,beta,0.2,2.6,1.1,1.4,1.7,
+SSP3,FERTILISER_COST_PER_T,beta,0.2,2.6,0.4,1.1,1.7,
+SSP4,FERTILISER_COST_PER_T,beta,0.2,2.6,0.8,1.7,2.3,
+SSP5,FERTILISER_COST_PER_T,beta,0.2,2.6,0.4,0.8,1.4,
+SSP1,INITIAL_PRICE_SHIFT,unif,0.8,1.2,,,,
+SSP2,INITIAL_PRICE_SHIFT,unif,0.8,1.2,,,,
+SSP3,INITIAL_PRICE_SHIFT,unif,0.8,1.2,,,,
+SSP4,INITIAL_PRICE_SHIFT,unif,0.8,1.2,,,,
+SSP5,INITIAL_PRICE_SHIFT,unif,0.8,1.2,,,,
+SSP1,IRRIG_COST_SCALE_FACTOR,beta,0,0.0006,0.0003,0.0004,0.0005,
+SSP2,IRRIG_COST_SCALE_FACTOR,beta,0,0.0006,0.0002,0.0003,0.0004,
+SSP3,IRRIG_COST_SCALE_FACTOR,beta,0,0.0006,0.00005,0.00015,0.0002,
+SSP4,IRRIG_COST_SCALE_FACTOR,beta,0,0.0006,0.0001,0.0003,0.0005,
+SSP5,IRRIG_COST_SCALE_FACTOR,beta,0,0.0006,0.00005,0.00015,0.0003,
+SSP1,IRRIGATION_EFFICIENCY,beta,0.4,0.6,0.52,0.55,0.58,
+SSP2,IRRIGATION_EFFICIENCY,beta,0.4,0.6,0.48,0.5,0.52,
+SSP3,IRRIGATION_EFFICIENCY,beta,0.4,0.6,0.42,0.45,0.48,
+SSP4,IRRIGATION_EFFICIENCY,beta,0.4,0.6,0.45,0.5,0.55,
+SSP5,IRRIGATION_EFFICIENCY,beta,0.4,0.6,0.5,0.52,0.55,
+SSP1,LAND_CHANGE_COST,beta,0.05,0.35,0.225,0.275,0.3,
+SSP2,LAND_CHANGE_COST,beta,0.05,0.35,0.175,0.2,0.225,
+SSP3,LAND_CHANGE_COST,beta,0.05,0.35,0.15,0.2,0.25,
+SSP4,LAND_CHANGE_COST,beta,0.05,0.35,0.2,0.225,0.275,
+SSP5,LAND_CHANGE_COST,beta,0.05,0.35,0.1,0.15,0.175,
+SSP1,MARKET_LAMBA,unif,0.3,0.5,,,,
+SSP2,MARKET_LAMBA,unif,0.3,0.5,,,,
+SSP3,MARKET_LAMBA,unif,0.3,0.5,,,,
+SSP4,MARKET_LAMBA,unif,0.3,0.5,,,,
+SSP5,MARKET_LAMBA,unif,0.3,0.5,,,,
+SSP1,MEAT_EFFICIENCY,beta,0.95,1.05,1.01,1.02,1.04,
+SSP2,MEAT_EFFICIENCY,beta,0.95,1.05,0.99,1,1.01,
+SSP3,MEAT_EFFICIENCY,beta,0.95,1.05,0.98,1,1.02,
+SSP4,MEAT_EFFICIENCY,beta,0.95,1.05,0.98,1,1.02,
+SSP5,MEAT_EFFICIENCY,beta,0.95,1.05,1,1.01,1.02,
+SSP1,MIN_NATURAL_RATE,beta,0,0.3,0.14,0.2,0.25,
+SSP2,MIN_NATURAL_RATE,beta,0,0.3,0.06,0.1,0.14,
+SSP3,MIN_NATURAL_RATE,beta,0,0.3,0.02,0.04,0.07,
+SSP4,MIN_NATURAL_RATE,beta,0,0.3,0.04,0.06,0.1,
+SSP5,MIN_NATURAL_RATE,beta,0,0.3,0.02,0.04,0.06,
+SSP1,OTHER_INTENSITY_COST,beta,0.5,0.9,0.7,0.8,0.85,
+SSP2,OTHER_INTENSITY_COST,beta,0.5,0.9,0.65,0.7,0.75,
+SSP3,OTHER_INTENSITY_COST,beta,0.5,0.9,0.55,0.65,0.75,
+SSP4,OTHER_INTENSITY_COST,beta,0.5,0.9,0.6,0.75,0.85,
+SSP5,OTHER_INTENSITY_COST,beta,0.5,0.9,0.55,0.6,0.7,
+SSP1,PASTURE_HARVEST_FRACTION,unif,0.4,0.6,,,,
+SSP2,PASTURE_HARVEST_FRACTION,unif,0.4,0.6,,,,
+SSP3,PASTURE_HARVEST_FRACTION,unif,0.4,0.6,,,,
+SSP4,PASTURE_HARVEST_FRACTION,unif,0.4,0.6,,,,
+SSP5,PASTURE_HARVEST_FRACTION,unif,0.4,0.6,,,,
+SSP1,SSP_GDP_PC_FACTOR,unif,0.9,1.1,,,,
+SSP2,SSP_GDP_PC_FACTOR,unif,0.9,1.1,,,,
+SSP3,SSP_GDP_PC_FACTOR,unif,0.9,1.1,,,,
+SSP4,SSP_GDP_PC_FACTOR,unif,0.9,1.1,,,,
+SSP5,SSP_GDP_PC_FACTOR,unif,0.9,1.1,,,,
+SSP1,SSP_POPULATION_FACTOR,unif,0.9,1.1,,,,
+SSP2,SSP_POPULATION_FACTOR,unif,0.9,1.1,,,,
+SSP3,SSP_POPULATION_FACTOR,unif,0.9,1.1,,,,
+SSP4,SSP_POPULATION_FACTOR,unif,0.9,1.1,,,,
+SSP5,SSP_POPULATION_FACTOR,unif,0.9,1.1,,,,
+SSP1,SSP_SCENARIO,value,,,,,,SSP1_v9_130325
+SSP2,SSP_SCENARIO,value,,,,,,SSP2_v9_130325
+SSP3,SSP_SCENARIO,value,,,,,,SSP3_v9_130325
+SSP4,SSP_SCENARIO,value,,,,,,SSP4_v9_130325
+SSP5,SSP_SCENARIO,value,,,,,,SSP5_v9_130325
+SSP1,TECHNOLOGY_CHANGE_ANNUAL_RATE,beta,-0.004,0.008,0.003,0.005,0.007,
+SSP2,TECHNOLOGY_CHANGE_ANNUAL_RATE,beta,-0.004,0.008,0.001,0.002,0.003,
+SSP3,TECHNOLOGY_CHANGE_ANNUAL_RATE,beta,-0.004,0.008,-0.001,0,0.001,
+SSP4,TECHNOLOGY_CHANGE_ANNUAL_RATE,beta,-0.004,0.008,0,0.002,0.005,
+SSP5,TECHNOLOGY_CHANGE_ANNUAL_RATE,beta,-0.004,0.008,0.002,0.004,0.005,
+SSP1,TRADE_BARRIERS_MULTIPLIER,beta,0,2,0.6,0.8,1,
+SSP2,TRADE_BARRIERS_MULTIPLIER,beta,0,2,0.8,1,1.2,
+SSP3,TRADE_BARRIERS_MULTIPLIER,beta,0,2,1.2,1.5,1.8,
+SSP4,TRADE_BARRIERS_MULTIPLIER,beta,0,2,1,1.2,1.5,
+SSP5,TRADE_BARRIERS_MULTIPLIER,beta,0,2,0.3,0.6,0.8,
+SSP1,TRANSPORT_COST,beta,0.01,0.09,0.05,0.065,0.08,
+SSP2,TRANSPORT_COST,beta,0.01,0.09,0.04,0.05,0.06,
+SSP3,TRANSPORT_COST,beta,0.01,0.09,0.02,0.04,0.06,
+SSP4,TRANSPORT_COST,beta,0.01,0.09,0.04,0.06,0.08,
+SSP5,TRANSPORT_COST,beta,0.01,0.09,0.02,0.035,0.05,
+SSP1,RCP,rcp,,,,,,ssp1
+SSP2,RCP,rcp,,,,,,ssp2
+SSP3,RCP,rcp,,,,,,ssp3
+SSP4,RCP,rcp,,,,,,ssp4
+SSP5,RCP,rcp,,,,,,ssp5
+SSP1,BIOENERGY_DEMAND_SCENARIO,value,,,,,,ssp1
+SSP2,BIOENERGY_DEMAND_SCENARIO,value,,,,,,ssp2
+SSP3,BIOENERGY_DEMAND_SCENARIO,value,,,,,,ssp3
+SSP4,BIOENERGY_DEMAND_SCENARIO,value,,,,,,ssp4
+SSP5,BIOENERGY_DEMAND_SCENARIO,value,,,,,,ssp5
+SSP1,YIELD_DIR_TOP,value,,,,,,ssp1
+SSP2,YIELD_DIR_TOP,value,,,,,,ssp2
+SSP3,YIELD_DIR_TOP,value,,,,,,ssp3
+SSP4,YIELD_DIR_TOP,value,,,,,,ssp4
+SSP5,YIELD_DIR_TOP,value,,,,,,ssp5
+SSP1,BIOENERGY_FUTURE_DEMAND_FILENAME,value,,,,,,bioenergy_scenario_data.csv
+SSP2,BIOENERGY_FUTURE_DEMAND_FILENAME,value,,,,,,bioenergy_scenario_data.csv
+SSP3,BIOENERGY_FUTURE_DEMAND_FILENAME,value,,,,,,bioenergy_scenario_data.csv
+SSP4,BIOENERGY_FUTURE_DEMAND_FILENAME,value,,,,,,bioenergy_scenario_data.csv
+SSP5,BIOENERGY_FUTURE_DEMAND_FILENAME,value,,,,,,bioenergy_scenario_data.csv
+SSP1,SHOCKS_POSSIBLE,value,,,,,,TRUE
+SSP2,SHOCKS_POSSIBLE,value,,,,,,TRUE
+SSP3,SHOCKS_POSSIBLE,value,,,,,,TRUE
+SSP4,SHOCKS_POSSIBLE,value,,,,,,TRUE
+SSP5,SHOCKS_POSSIBLE,value,,,,,,TRUE
+SSP1,CEREALS_SUB_PROPORTION,unif,0.15,0.45,,,,
+SSP2,CEREALS_SUB_PROPORTION,unif,0.15,0.45,,,,
+SSP3,CEREALS_SUB_PROPORTION,unif,0.15,0.45,,,,
+SSP4,CEREALS_SUB_PROPORTION,unif,0.15,0.45,,,,
+SSP5,CEREALS_SUB_PROPORTION,unif,0.15,0.45,,,,
+SSP1,PULSES_SUB_PROPORTION,unif,0.175,0.525,,,,
+SSP2,PULSES_SUB_PROPORTION,unif,0.175,0.525,,,,
+SSP3,PULSES_SUB_PROPORTION,unif,0.175,0.525,,,,
+SSP4,PULSES_SUB_PROPORTION,unif,0.175,0.525,,,,
+SSP5,PULSES_SUB_PROPORTION,unif,0.175,0.525,,,,
+SSP1,OILCROPS_SUB_PROPORTION,unif,0.025,0.075,,,,
+SSP2,OILCROPS_SUB_PROPORTION,unif,0.025,0.075,,,,
+SSP3,OILCROPS_SUB_PROPORTION,unif,0.025,0.075,,,,
+SSP4,OILCROPS_SUB_PROPORTION,unif,0.025,0.075,,,,
+SSP5,OILCROPS_SUB_PROPORTION,unif,0.025,0.075,,,,
+SSP1,STARCHY_ROOTS_SUB_PROPORTION,unif,0.15,0.45,,,,
+SSP2,STARCHY_ROOTS_SUB_PROPORTION,unif,0.15,0.45,,,,
+SSP3,STARCHY_ROOTS_SUB_PROPORTION,unif,0.15,0.45,,,,
+SSP4,STARCHY_ROOTS_SUB_PROPORTION,unif,0.15,0.45,,,,
+SSP5,STARCHY_ROOTS_SUB_PROPORTION,unif,0.15,0.45,,,,
+SSP1,ORIG_LEAST_COST_MIN,value,,,,,,FALSE
+SSP2,ORIG_LEAST_COST_MIN,value,,,,,,FALSE
+SSP3,ORIG_LEAST_COST_MIN,value,,,,,,FALSE
+SSP4,ORIG_LEAST_COST_MIN,value,,,,,,FALSE
+SSP5,ORIG_LEAST_COST_MIN,value,,,,,,FALSE
diff --git a/data/sims/shocks_sims.csv b/data/sims/shocks_sims.csv
new file mode 100644
index 0000000000000000000000000000000000000000..d94b701b01321bb8415c4e21d1696c784a3454d7
--- /dev/null
+++ b/data/sims/shocks_sims.csv
@@ -0,0 +1,51 @@
+Ensemble,Scenario,AGRI_LAND_EXPANSION_COST_FACTOR,ANNUAL_MAX_IMPORT_CHANGE,BIOENERGY_DEMAND_SHIFT,CROP_TO_PASTURE_COST_FACTOR,FERTILISER_COST_PER_T,INITIAL_PRICE_SHIFT,IRRIG_COST_SCALE_FACTOR,IRRIGATION_EFFICIENCY,LAND_CHANGE_COST,MARKET_LAMBA,MEAT_EFFICIENCY,MIN_NATURAL_RATE,OTHER_INTENSITY_COST,PASTURE_HARVEST_FRACTION,SSP_GDP_PC_FACTOR,SSP_POPULATION_FACTOR,SSP_SCENARIO,TECHNOLOGY_CHANGE_ANNUAL_RATE,TRADE_BARRIERS_MULTIPLIER,TRANSPORT_COST,RCP,BIOENERGY_FUTURE_DEMAND_FILENAME,SHOCKS_POSSIBLE,CEREALS_SUB_PROPORTION,PULSES_SUB_PROPORTION,OILCROPS_SUB_PROPORTION,STARCHY_ROOTS_SUB_PROPORTION,ORIG_LEAST_COST_MIN,YIELD_DIR_TOP,BIOENERGY_DEMAND_SCENARIO
+shocks/SSP1,s1,1.30660468251533,0.0228770160929893,1,1,1.95478849592337,1,0.000390070160965327,0.543143007232545,0.273082824305185,0.4,1.01533023412577,0.195035080482664,0.792464749320561,0.5,1,1,SSP1_v9_130325,0.0043697548242007,0.804684232679383,0.0625529531354358,rcp45,bioenergy_scenario_data.csv,TRUE,0.3,0.35,0.05,0.3,FALSE,rcp45,SSP1_RCP45
+shocks/SSP1,s2,1.54790984303127,0.0214839384786384,1.05,0.9,2.11331205428652,0.9,0.000439712506444229,0.522883961636984,0.260497349959828,0.45,1.00172299275499,0.219856253222114,0.762938815233838,0.55,0.95,1.05,SSP1_v9_130325,0.00284782774978011,0.892981559287351,0.0534306136855851,rcp60,bioenergy_scenario_data.csv,TRUE,0.340909090909091,0.397727272727273,0.0568181818181818,0.204545454545455,FALSE,rcp60,SSP1_RCP60
+shocks/SSP1,s3,1.03445985509982,0.0242169546991675,0.95,1.1,1.77763289140303,1.1,0.000336454765220775,0.560804997269742,0.284824516367045,0.35,1.02739549215156,0.168227382610388,0.818885342381086,0.45,1.05,0.95,SSP1_v9_130325,0.00567673525237017,0.718456680365365,0.0707791804420796,rcp45,bioenergy_scenario_data.csv,TRUE,0.25,0.291666666666667,0.0416666666666667,0.416666666666667,FALSE,rcp45,SSP1_RCP45
+shocks/SSP1,s4,1.18011203692493,0.0222238146836663,1.025,0.85,2.21138114822018,1.15,0.000297658154750587,0.55187750477836,0.251190281847944,0.475,1.00900560184625,0.207081890146159,0.740803236535345,0.475,1.025,0.925,SSP1_v9_130325,0.00366905314915087,0.763628922290554,0.0757348286419711,rcp60,bioenergy_scenario_data.csv,TRUE,0.44,0.326666666666667,0.0333333333333333,0.2,FALSE,rcp60,SSP1_RCP60
+shocks/SSP1,s5,1.68712459733118,0.0251160485505954,0.925,1.05,1.87306648304096,0.95,0.000414163780292317,0.507738565320178,0.278743046214026,0.375,1.03435622986656,0.148829077375294,0.805387725330027,0.575,0.925,1.025,SSP1_v9_130325,0.00641323525127281,0.955955002707142,0.0583130649033555,rcp45,bioenergy_scenario_data.csv,TRUE,0.230769230769231,0.423076923076923,0.0494505494505494,0.296703296703297,FALSE,rcp45,SSP1_RCP45
+shocks/SSP1,s6,1.42608431668559,0.020484656645973,0.975,0.95,1.64481941921207,1.05,0.000471149717022949,0.571197905518257,0.267233889736522,0.325,0.992019633340972,0.182541367124365,0.77884441384016,0.525,1.075,1.075,SSP1_v9_130325,0.00172654612000884,0.846202333458787,0.0665902063269412,rcp45,bioenergy_scenario_data.csv,TRUE,0.205479452054795,0.431506849315068,0.0753424657534247,0.287671232876712,FALSE,rcp45,SSP1_RCP45
+shocks/SSP1,s7,0.840392666819443,0.0235183190940216,1.075,1.15,2.03232635198016,0.85,0.000365082734248729,0.533822367498968,0.292533770487903,0.425,1.02130421583428,0.235574858511474,0.83523019137003,0.425,0.975,0.975,SSP1_v9_130325,0.00502166031087259,0.659406330981701,0.0468469071878789,rcp60,bioenergy_scenario_data.csv,TRUE,0.333333333333333,0.216049382716049,0.0432098765432099,0.407407407407407,FALSE,rcp60,SSP1_RCP60
+shocks/SSP1,s8,0.947079413058987,0.0218711945581873,0.9625,1.075,1.99362745293572,0.875,0.000266547291002851,0.578207463425012,0.256377522723662,0.3125,1.02430218052628,0.227088490947081,0.798937908822619,0.5375,0.9375,1.0375,SSP1_v9_130325,0.00083953812772664,0.613112316714834,0.0730918071675773,rcp60,bioenergy_scenario_data.csv,TRUE,0.284810126582278,0.420886075949367,0.0474683544303797,0.246835443037975,FALSE,rcp60,SSP1_RCP60
+shocks/SSP1,s9,1.48604361052557,0.0246241323378201,1.0625,0.875,1.53497915088738,1.075,0.000402092805288833,0.538606920741212,0.28168325290689,0.4125,0.997353970652949,0.175733923722865,0.722496525147897,0.4375,1.0375,0.9375,SSP1_v9_130325,0.0046985541914294,0.82513042147288,0.0559918173191546,rcp45,bioenergy_scenario_data.csv,TRUE,0.379120879120879,0.211538461538462,0.0631868131868132,0.346153846153846,FALSE,rcp45,SSP1_RCP45
+shocks/SSP1,s10,1.7775717843041,0.0196770094284043,1.0125,1.175,1.82793270700347,0.975,0.000454176981894161,0.556262112241531,0.270217915435747,0.4625,1.03887858921521,0.133273645501426,0.826440118671977,0.4875,0.9875,0.9875,SSP1_v9_130325,0.00328017089364283,0.921083111431939,0.0645757939740144,rcp45,bioenergy_scenario_data.csv,TRUE,0.39041095890411,0.35958904109589,0.0650684931506849,0.184931506849315,FALSE,rcp45,SSP1_RCP45
+shocks/SSP2,s1,1,0.02,1,1,1.4,1,3e-04,0.5,0.2,0.4,1,0.102766896900118,0.7,0.5,1,1,SSP2_v9_130325,0.002,1,0.05,rcp60,bioenergy_scenario_data.csv,TRUE,0.3,0.35,0.05,0.3,FALSE,rcp60,SSP2_RCP60
+shocks/SSP2,s2,1.08270938702243,0.0187532681030967,1.05,0.9,1.52467318969033,0.9,0.000342014778383574,0.491729061297757,0.189688362297416,0.45,0.995864530648878,0.122695883337939,0.679221135051611,0.55,0.95,1.05,SSP2_v9_130325,0.00158753449189663,1.08270938702243,0.0458442270103222,rcp60,bioenergy_scenario_data.csv,TRUE,0.340909090909091,0.397727272727273,0.0568181818181818,0.204545454545455,FALSE,rcp60,SSP2_RCP60
+shocks/SSP2,s3,0.91729061297757,0.0212467318969033,0.95,1.1,1.27532681030967,1.1,0.000257985221616426,0.508270938702243,0.210311637702584,0.35,1.00413546935112,0.0840110432944513,0.720778864948389,0.45,1.05,0.95,SSP2_v9_130325,0.00241246550810337,0.91729061297757,0.0541557729896778,rcp60,bioenergy_scenario_data.csv,TRUE,0.25,0.291666666666667,0.0416666666666667,0.416666666666667,FALSE,rcp60,SSP2_RCP60
+shocks/SSP2,s4,0.960874657414893,0.0194097808551165,1.025,0.85,1.61153483560056,1.15,0.000229015531982238,0.503912534258511,0.182453074797474,0.475,0.998043732870745,0.112067534446962,0.664744194066573,0.475,1.025,0.925,SSP2_v9_130325,0.00180496552244993,0.960874657414893,0.0570511611866855,rcp85,bioenergy_scenario_data.csv,TRUE,0.44,0.326666666666667,0.0333333333333333,0.2,FALSE,rcp85,SSP2_RCP85
+shocks/SSP2,s5,1.14060088096457,0.0221153483560056,0.925,1.05,1.34097808551165,0.95,0.000319925055308764,0.485939911903543,0.204875861938752,0.375,1.00703004404823,0.0717421347364521,0.709836985748058,0.575,0.925,1.025,SSP2_v9_130325,0.00270187700810103,1.14060088096457,0.0480326028503884,rcp60,bioenergy_scenario_data.csv,TRUE,0.230769230769231,0.423076923076923,0.0494505494505494,0.296703296703297,FALSE,rcp60,SSP2_RCP60
+shocks/SSP2,s6,1.03912534258511,0.0178846516439944,0.975,0.95,1.18846516439944,1.05,0.000370984468017762,0.514060088096457,0.195124138061248,0.325,0.992969955951772,0.0937292467329929,0.690163014251942,0.525,1.075,1.075,SSP2_v9_130325,0.00129812299189897,1.03912534258511,0.0519673971496117,rcp60,bioenergy_scenario_data.csv,TRUE,0.205479452054795,0.431506849315068,0.0753424657534247,0.287671232876712,FALSE,rcp60,SSP2_RCP60
+shocks/SSP2,s7,0.859399119035433,0.0205902191448835,1.075,1.15,1.45902191448835,0.85,0.000280074944691236,0.496087465741489,0.217546925202526,0.425,1.00195626712926,0.13716683564989,0.735255805933427,0.425,0.975,0.975,SSP2_v9_130325,0.00219503447755007,0.859399119035433,0.0429488388133145,rcp60,bioenergy_scenario_data.csv,TRUE,0.333333333333333,0.216049382716049,0.0432098765432099,0.407407407407407,FALSE,rcp60,SSP2_RCP60
+shocks/SSP2,s8,0.891349695386158,0.0190953765627878,0.9625,1.075,1.42915219840989,0.875,0.000206379438102187,0.518678231924779,0.186448969904585,0.3125,1.00299925739028,0.129136314317571,0.704858699734982,0.5375,0.9375,1.0375,SSP2_v9_130325,0.00106646891392977,0.813217680752207,0.0554552181300731,rcp85,bioenergy_scenario_data.csv,TRUE,0.284810126582278,0.420886075949367,0.0474683544303797,0.246835443037975,FALSE,rcp85,SSP2_RCP85
+shocks/SSP2,s9,1.05998514780556,0.0216365654390219,1.0625,0.875,1.11961312890323,1.075,0.000309845153366947,0.498067840937043,0.207476646078755,0.4125,0.994567484769308,0.0890295783085543,0.653268854817205,0.4375,1.0375,0.9375,SSP2_v9_130325,0.00209630682320497,1.01932159062957,0.0469845885426258,rcp60,bioenergy_scenario_data.csv,TRUE,0.379120879120879,0.211538461538462,0.0631868131868132,0.346153846153846,FALSE,rcp60,SSP2_RCP60
+shocks/SSP2,s10,1.18678231924779,0.0171961312890323,1.0125,1.175,1.30953765627878,0.975,0.00035506220712875,0.505998514780556,0.197592329419876,0.4625,1.00933911596239,0.0625340908685169,0.727276090650366,0.4875,0.9875,0.9875,SSP2_v9_130325,0.00170093415684978,1.10865030461384,0.0509717399469965,rcp60,bioenergy_scenario_data.csv,TRUE,0.39041095890411,0.35958904109589,0.0650684931506849,0.184931506849315,FALSE,rcp60,SSP2_RCP60
+shocks/SSP3,s1,0.52024973082015,0.0144521138994884,1,1,1.24996893009364,1,0.000181512340250704,0.456856935948328,0.2,0.4,1,0.0445126831921568,0.663245104481559,0.5,1,1,SSP3_v9_130325,3.69271604227922e-05,1.43143007232545,0.0426490208963119,rcp60,bioenergy_scenario_data.csv,TRUE,0.3,0.35,0.05,0.3,FALSE,rcp60,SSP3_RCP60
+shocks/SSP3,s2,0.626836319372511,0.0128668802502573,1.05,0.9,1.71576868292866,0.9,0.000257608797012638,0.439195017296463,0.178992610808213,0.45,0.991499566495146,0.057952756518755,0.609099799539873,0.55,0.95,1.05,SSP3_v9_130325,-0.000403161804191794,1.60804997269742,0.0318199599079746,rcp85,bioenergy_scenario_data.csv,TRUE,0.340909090909091,0.397727272727273,0.0568181818181818,0.204545454545455,FALSE,rcp85,SSP3_RCP85
+shocks/SSP3,s3,0.42240292862359,0.0162236675874247,0.95,1.1,0.81494452402692,1.1,0.000116163234931558,0.477115892757839,0.221007389191787,0.35,1.00850043350485,0.0330090823549182,0.721568949329571,0.45,1.05,0.95,SSP3_v9_130325,0.000493430076903505,1.22883961636984,0.0543137898659143,rcp60,bioenergy_scenario_data.csv,TRUE,0.25,0.291666666666667,0.0416666666666667,0.416666666666667,FALSE,rcp60,SSP3_RCP60
+shocks/SSP3,s4,0.472828658836114,0.0136767363178329,1.025,0.85,2.00628515703454,1.15,7.93381979158249e-05,0.466177534970001,0.164507765991119,0.475,0.995961271646254,0.0506301059058289,0.576813814608971,0.475,1.025,0.925,SSP3_v9_130325,-0.000173264707884575,1.33822367498968,0.0622443170156101,rcp85,bioenergy_scenario_data.csv,TRUE,0.44,0.326666666666667,0.0333333333333333,0.2,FALSE,rcp85,SSP3_RCP85
+shocks/SSP3,s5,0.706212456808112,0.0175518005237929,0.925,1.05,1.03427294323604,0.95,0.000216547471988307,0.428802142902719,0.209962527654382,0.375,1.01429697586053,0.0261085152314528,0.690726165466602,0.575,0.925,1.025,SSP3_v9_130325,0.000823126072871327,1.71197905518257,0.0373432953175058,rcp60,bioenergy_scenario_data.csv,TRUE,0.230769230769231,0.423076923076923,0.0494505494505494,0.296703296703297,FALSE,rcp60,SSP3_RCP60
+shocks/SSP3,s6,0.569627876199485,0.0118861903281928,0.975,0.95,0.575006888801793,1.05,0.000313672946680845,0.492261225015423,0.190037472345618,0.325,0.985703024139469,0.0388290458435607,0.636716476587529,0.525,1.075,1.075,SSP3_v9_130325,-0.00070170222053337,1.5187750477836,0.0481452330933205,rcp45,bioenergy_scenario_data.csv,TRUE,0.205479452054795,0.431506849315068,0.0753424657534247,0.287671232876712,FALSE,rcp45,SSP3_RCP45
+shocks/SSP3,s7,0.35950033211296,0.0152693329537884,1.075,1.15,1.47281094120852,0.85,0.000148917022380211,0.448122475133549,0.235492234008881,0.425,1.00403872835375,0.0684984107814919,0.761221585078051,0.425,0.975,0.975,SSP3_v9_130325,0.000250787709514898,1.07738565320178,0.0253627629217942,rcp60,bioenergy_scenario_data.csv,TRUE,0.333333333333333,0.216049382716049,0.0432098765432099,0.407407407407407,FALSE,rcp60,SSP3_RCP60
+shocks/SSP3,s8,0.393630352957537,0.0132817729600999,0.9625,1.075,1.35981822722675,0.875,5.57880317639894e-05,0.504575935346175,0.172468896435625,0.3125,1.00618145203469,0.0625634106275243,0.676741762503836,0.5375,0.9375,1.0375,SSP3_v9_130325,-0.000934322350810428,0.95423807573882,0.0579273940735087,rcp85,bioenergy_scenario_data.csv,TRUE,0.284810126582278,0.420886075949367,0.0474683544303797,0.246835443037975,FALSE,rcp85,SSP3_RCP85
+shocks/SSP3,s9,0.596725537287047,0.0168110877200933,1.0625,0.875,0.432703060835255,1.075,0.000198549210969431,0.452464080654622,0.215259115964058,0.4125,0.988879099276111,0.0359763457745679,0.555379009321426,0.4375,1.0375,0.9375,SSP3_v9_130325,0.000142076929961531,1.47535881251776,0.0346392703707599,rcp60,bioenergy_scenario_data.csv,TRUE,0.379120879120879,0.211538461538462,0.0631868131868132,0.346153846153846,FALSE,rcp60,SSP3_RCP60
+shocks/SSP3,s10,0.772118515732619,0.0111863738577089,1.0125,1.175,0.925831345256541,0.975,0.000282646540713303,0.471349162143331,0.195077423316527,0.4625,1.01875730938355,0.0212752105246864,0.739636970367543,0.4875,0.9875,0.9875,SSP3_v9_130325,-0.000283850702175425,1.65677298115535,0.0453483525007672,rcp60,bioenergy_scenario_data.csv,TRUE,0.39041095890411,0.35958904109589,0.0650684931506849,0.184931506849315,FALSE,rcp60,SSP3_RCP60
+shocks/SSP4,s1,0.811640789284124,0.0171229837882688,1,1,1.62052874275472,1,3e-04,0.5,0.223224848256224,0.4,1,0.0617946629980457,0.73675479045912,0.5,1,1,SSP4_v9_130325,0.002,1.18835921530899,0.057350958091824,rcp60,bioenergy_scenario_data.csv,TRUE,0.3,0.35,0.05,0.3,FALSE,rcp60,SSP4_RCP60
+shocks/SSP4,s2,0.950913447119588,0.0157830458101546,1.05,0.9,1.94540176353163,0.9,0.000392219996545916,0.47825814477904,0.200109409407399,0.45,0.991499566495146,0.0721511689357051,0.678430727670076,0.55,0.95,1.05,SSP4_v9_130325,0.00115970443232851,1.32271087533741,0.0456861455340151,rcp60,bioenergy_scenario_data.csv,TRUE,0.340909090909091,0.397727272727273,0.0568181818181818,0.204545454545455,FALSE,rcp60,SSP4_RCP60
+shocks/SSP4,s3,0.677289103652929,0.0185160607259331,0.95,1.1,1.27058436602045,1.1,0.000207780003454084,0.52174185522096,0.245602104047409,0.35,1.00850043350485,0.0522332070850587,0.790900293921938,0.45,1.05,0.95,SSP4_v9_130325,0.00284029556767149,1.04908658487231,0.0681800587843877,rcp45,bioenergy_scenario_data.csv,TRUE,0.25,0.291666666666667,0.0416666666666667,0.416666666666667,FALSE,rcp45,SSP4_RCP45
+shocks/SSP4,s4,0.747317644437761,0.0164816810924002,1.025,0.85,2.13911822036366,1.15,0.000149872893774089,0.510368611745326,0.18380421752541,0.475,0.995961271646254,0.0665930165455536,0.638777971110566,0.475,1.025,0.925,SSP4_v9_130325,0.00160149889382473,1.12293272169141,0.0746372740121221,rcp60,bioenergy_scenario_data.csv,TRUE,0.44,0.326666666666667,0.0333333333333333,0.2,FALSE,rcp60,SSP4_RCP60
+shocks/SSP4,s5,1.04992250232152,0.0195153420744095,0.925,1.05,1.45564174279705,0.95,0.000344420554391967,0.463759734884964,0.233937129448582,0.375,1.01429697586053,0.0460025680312655,0.763283519442843,0.575,0.925,1.025,SSP4_v9_130325,0.00341968936035525,1.41248926790519,0.0518547247599017,rcp60,bioenergy_scenario_data.csv,TRUE,0.230769230769231,0.423076923076923,0.0494505494505494,0.296703296703297,FALSE,rcp60,SSP4_RCP60
+shocks/SSP4,s6,0.877067295765406,0.014883952352434,0.975,0.95,1.0326678266634,1.05,0.000450127106225911,0.536240265115036,0.212346886972287,0.325,0.985703024139469,0.0571740490794656,0.709273623799508,0.525,1.075,1.075,SSP4_v9_130325,0.000580310639644753,1.25268234769637,0.0626567038885685,rcp45,bioenergy_scenario_data.csv,TRUE,0.205479452054795,0.431506849315068,0.0753424657534247,0.287671232876712,FALSE,rcp45,SSP4_RCP45
+shocks/SSP4,s7,0.58751069527749,0.0177761848815033,1.075,1.15,1.77970111665706,0.85,0.000255579445608033,0.489631388254674,0.260527881418834,0.425,1.00403872835375,0.0798896931694546,0.82318637006061,0.425,0.975,0.975,SSP4_v9_130325,0.00239850110617527,0.950077548783454,0.0377555942221132,rcp60,bioenergy_scenario_data.csv,TRUE,0.333333333333333,0.216049382716049,0.0432098765432099,0.407407407407407,FALSE,rcp60,SSP4_RCP60
+shocks/SSP4,s8,0.63656265300707,0.0161451239025991,0.9625,1.075,1.70010973398956,0.875,0.000110146094662154,0.547056058716041,0.192800029046496,0.3125,1.00618145203469,0.075567884872693,0.750018288998261,0.5375,0.9375,1.0375,SSP4_v9_130325,0.00012758876204373,0.870914911636531,0.0712118788776287,rcp85,bioenergy_scenario_data.csv,TRUE,0.284810126582278,0.420886075949367,0.0474683544303797,0.246835443037975,FALSE,rcp85,SSP4_RCP85
+shocks/SSP4,s9,0.912306235156161,0.0189617450307193,1.0625,0.875,0.857329300359078,1.075,0.000322023747407471,0.494870514918668,0.239559992470989,0.4125,0.988879099276111,0.0547823376612273,0.60955488339318,0.4375,1.0375,0.9375,SSP4_v9_130325,0.00219690306733894,1.22027912056015,0.0488966261241963,rcp60,bioenergy_scenario_data.csv,TRUE,0.379120879120879,0.211538461538462,0.0631868131868132,0.346153846153846,FALSE,rcp60,SSP4_RCP60
+shocks/SSP4,s10,1.12908515409343,0.0141930803193253,1.0125,1.175,1.36689878372589,0.975,0.000419131787359978,0.515846543233086,0.217869810476089,0.4625,1.01875730938355,0.0413016340925494,0.806059394388144,0.4875,0.9875,0.9875,SSP4_v9_130325,0.00138963536143769,1.36343731863701,0.0600036577996521,rcp45,bioenergy_scenario_data.csv,TRUE,0.39041095890411,0.35958904109589,0.0650684931506849,0.184931506849315,FALSE,rcp45,SSP4_RCP45
+shocks/SSP5,s1,0.811640789284124,0.0255478849592337,1,1,0.926049361002817,1,0.000181512340250704,0.518835921530899,0.154964919394384,0.4,1.00976578836866,0.0445126831921568,0.607535231658141,0.5,1,1,SSP5_v9_130325,0.00396307283703912,0.635905109239572,0.0374470532300597,rcp85,bioenergy_scenario_data.csv,TRUE,0.3,0.35,0.05,0.3,FALSE,rcp85,SSP5_RCP85
+shocks/SSP5,s2,0.950913447119588,0.0237763289140303,1.05,0.9,1.23043518805055,0.9,0.000257608797012638,0.504908658487231,0.130143746947899,0.45,1.00535092206312,0.057952756518755,0.581114670837621,0.55,0.95,1.05,SSP5_v9_130325,0.00350656990464916,0.803172883434773,0.0292208157420578,rcp85,bioenergy_scenario_data.csv,TRUE,0.340909090909091,0.397727272727273,0.0568181818181818,0.204545454545455,FALSE,rcp85,SSP5_RCP85
+shocks/SSP5,s3,0.677289103652929,0.0271331205428652,0.95,1.1,0.664652939726232,1.1,0.000116163234931558,0.532271087533741,0.181772616931047,0.35,1.01407716596062,0.0330090823549182,0.637061126457078,0.45,1.05,0.95,SSP5_v9_130325,0.00440316181646114,0.483175490607284,0.0465694046538295,rcp60,bioenergy_scenario_data.csv,TRUE,0.25,0.291666666666667,0.0416666666666667,0.416666666666667,FALSE,rcp60,SSP5_RCP60
+shocks/SSP5,s4,0.747317644437761,0.0247306648304096,1.025,0.85,1.45469178672338,1.15,7.93381979158249e-05,0.525268234769637,0.114425141818419,0.475,1.00768988334135,0.0506301059058289,0.564769838803214,0.475,1.025,0.925,SSP5_v9_130325,0.00374921228054304,0.561543291189036,0.0531531191676086,rcp85,bioenergy_scenario_data.csv,TRUE,0.44,0.326666666666667,0.0333333333333333,0.2,FALSE,rcp85,SSP5_RCP85
+shocks/SSP5,s5,1.04992250232152,0.0281138114822018,0.925,1.05,0.795668089520843,0.95,0.000216547471988307,0.495007754878345,0.167458632596606,0.375,1.01702968341419,0.0261085152314528,0.621155549229806,0.575,0.925,1.025,SSP5_v9_130325,0.00470170224237687,0.92597876013111,0.0334097948543317,rcp60,bioenergy_scenario_data.csv,TRUE,0.230769230769231,0.423076923076923,0.0494505494505494,0.296703296703297,FALSE,rcp60,SSP5_RCP60
+shocks/SSP5,s6,0.877067295765406,0.0224481941921206,0.975,0.95,0.5173527916633,1.05,0.000313672946680845,0.541248926790519,0.142918109877283,0.325,1.00220224990988,0.0388290458435607,0.594612271963882,0.525,1.075,1.075,SSP5_v9_130325,0.00317687389702778,0.713535210739204,0.0416869470585662,rcp60,bioenergy_scenario_data.csv,TRUE,0.205479452054795,0.431506849315068,0.0753424657534247,0.287671232876712,FALSE,rcp60,SSP5_RCP60
+shocks/SSP5,s7,0.58751069527749,0.0263232635198016,1.075,1.15,1.06618988795323,0.85,0.000148917022380211,0.512293272169141,0.201170921929993,0.425,1.0118185538767,0.0684984107814919,0.659196675396549,0.425,0.975,0.975,SSP5_v9_130325,0.00417326471250381,0.387371373137462,0.0242651625750109,rcp85,bioenergy_scenario_data.csv,TRUE,0.333333333333333,0.216049382716049,0.0432098765432099,0.407407407407407,FALSE,rcp85,SSP5_RCP85
+shocks/SSP5,s8,0.63656265300707,0.0242793270700347,0.9625,1.075,0.994196843877722,0.875,5.57880317639894e-05,0.548097210546723,0.122911509299956,0.3125,1.01290330152184,0.0625634106275243,0.614178583117231,0.5375,0.9375,1.0375,SSP5_v9_130325,0.00290758694314781,0.318435110768064,0.0495172071217179,rcp85,bioenergy_scenario_data.csv,TRUE,0.284810126582278,0.420886075949367,0.0474683544303797,0.246835443037975,FALSE,rcp85,SSP5_RCP85
+shocks/SSP5,s9,0.912306235156161,0.0275864071203186,1.0625,0.875,0.423152127055958,1.075,0.000198549210969431,0.515617011061736,0.174266075912534,0.4125,1.00394584446383,0.0359763457745679,0.553106230961815,0.4375,1.0375,0.9375,SSP5_v9_130325,0.00406732813461995,0.673867127371789,0.0313602797328327,rcp60,bioenergy_scenario_data.csv,TRUE,0.379120879120879,0.211538461538462,0.0631868131868132,0.346153846153846,FALSE,rcp60,SSP5_RCP60
+shocks/SSP5,s10,1.12908515409343,0.0213497915088738,1.0125,1.175,0.730943888305931,0.975,0.000282646540713303,0.528643312224093,0.14895359730641,0.4625,1.01934438411581,0.0212752105246864,0.646851462001555,0.4875,0.9875,0.9875,SSP5_v9_130325,0.00363366757352137,0.85777615593929,0.0395194273741454,rcp60,bioenergy_scenario_data.csv,TRUE,0.39041095890411,0.35958904109589,0.0650684931506849,0.184931506849315,FALSE,rcp60,SSP5_RCP60
diff --git a/scripts/createScenarios.sh b/scripts/createScenarios.sh
index a3dbec07c91240e62201d6bb866711d22f3626ce..5f859d1d8669ad75e94acb5d2f7aaecb28bcf17f 100755
--- a/scripts/createScenarios.sh
+++ b/scripts/createScenarios.sh
@@ -45,8 +45,14 @@ do
      do
         echo "${header[index]}"="${array[index]}" >> $config_file
      done
-
+	 
      echo "$scenario generated"
   fi
+  	
 done < $filename
 
+echo "Running R shock script"
+	module load R
+	R < /exports/csce/eddie/geos/groups/LURG/models/PLUM/plumv2/scripts/createShockFiles.R  --no-save --args $1
+
+
diff --git a/scripts/createShockFiles.R b/scripts/createShockFiles.R
new file mode 100644
index 0000000000000000000000000000000000000000..a831a3411b3ba905b96bb94adefac5e2c2901b5c
--- /dev/null
+++ b/scripts/createShockFiles.R
@@ -0,0 +1,135 @@
+# TODO: Add comment
+# 
+# Author: rhenry2
+###############################################################################
+library(data.table)
+
+createShockFile = function(scenario){
+	
+#setting all parameters to default values. If parameters are changed according to ssp then pull value from samp table, if not
+#set as default same as in config file or to a value that makes no change  
+	
+	paramValues = data.table(Year = seq(2010,2100,1),
+			trendYearValue = c(rep(0,16),seq(0.2,1,0.2),rep(1,70)),
+			TRADE_BARRIERS_MULTIPLIER =scenario[,TRADE_BARRIERS_MULTIPLIER], 
+			TRANSPORT_COST = scenario[,TRANSPORT_COST],
+			TECHNOLOGY_CHANGE_ANNUAL_RATE = scenario[,TECHNOLOGY_CHANGE_ANNUAL_RATE],
+			MEAT_EFFICIENCY = scenario[,MEAT_EFFICIENCY],
+			FERTILISER_COST_PER_T=scenario[,FERTILISER_COST_PER_T],
+			OTHER_INTENSITY_COST = scenario[,OTHER_INTENSITY_COST],
+			TRANSPORT_LOSSES = 0.05,
+			IRRIG_COST_MULTIPLIER = 1.0, 
+			RUMINANT_CHANGE_ANNUAL_RATE = 0.0, 
+			MONOGASTRIC_CHANGE_ANNUAL_RATE = 0.0,
+			IRRIG_EFF_MULTIPLIER = 1.0,
+			FINANCIAL_SPECULATION_MULTIPLIER = 1.0)
+	
+	paramValues[, names(paramValues) := lapply(.SD, as.numeric)]
+	
+	shocksHappen = data.table(SSP_Scenario = scenario[,SSP_SCENARIO], Scenario = scenario[,Scenario], Year = seq(2010,2100,1), 
+			climate =as.logical(rbinom(91,size=1,prob = shockProbs[ssp == substr(scenario[,SSP_SCENARIO],1,4),climate])), 
+			cyber=as.logical(rbinom(91,size=1,prob = shockProbs[ssp == substr(scenario[,SSP_SCENARIO],1,4),cyber])), 
+			financial =as.logical(rbinom(91,size=1,prob = shockProbs[ssp == substr(scenario[,SSP_SCENARIO],1,4),financial])))
+	
+	shockValues = data.table(Year = rep(seq(2010,2100,1),6),shock = rep(c("protectionism","automation","diet","cyber","climate","financial"), each=91), 
+			TRADE_BARRIERS_MULTIPLIER = 0, 
+			TRANSPORT_COST = 0,
+			TECHNOLOGY_CHANGE_ANNUAL_RATE = 0,
+			MEAT_EFFICIENCY = 0,
+			FERTILISER_COST_PER_T=0,
+			OTHER_INTENSITY_COST = 0,
+			TRANSPORT_LOSSES = 0,
+			IRRIG_COST_MULTIPLIER = 0, 
+			RUMINANT_CHANGE_ANNUAL_RATE = 0, 
+			MONOGASTRIC_CHANGE_ANNUAL_RATE = 0,
+			IRRIG_EFF_MULTIPLIER = 0,
+			FINANCIAL_SPECULATION_MULTIPLIER = 0)
+	
+	for (trendType in c("protectionism", "automation", "diet")){
+		if(as.logical(rbinom(1,size=1,prob =shockProbs[ssp == substr(scenario[,SSP_SCENARIO],1,4),get(trendType)]))){
+			for(paramName in shockDistFile[shock == trendType]$pname){
+				
+				randomValue = drawValue(trendType, paramName)
+				#put in records table
+				shockValues[shock == trendType, c(paramName) := randomValue * paramValues[,trendYearValue]]
+				
+				if(shockDistFile[shock == trendType & pname == paramName]$type == 'additive'){
+					paramValues[,c(paramName) := get(paramName) + randomValue * trendYearValue]		
+				}
+				else{
+					paramValues[,c(paramName) := get(paramName) * (1 + randomValue*trendYearValue)]
+				}
+			}		
+		}	
+	}
+	
+	
+	for(year in paramValues[,Year]){
+		for (shockType in names(shocksHappen)[4:6]){
+			if(shocksHappen[Year == year, get(shockType)]){	
+				for(paramName in shockDistFile[shock == shockType]$pname){
+					
+					randomValue = drawValue(shockType, paramName)
+					#put in records table
+					shockValues[shock == shockType & Year == year, c(paramName) := randomValue]
+					
+					#shock is changed from baseline value not change from previous year 
+					if(shockDistFile[shock == shockType & pname == paramName]$type == 'additive'){
+						paramValues[Year == year,c(paramName) := get(paramName) + randomValue]
+					}
+					else{
+						paramValues[Year == year,c(paramName) := get(paramName) * (1 + randomValue)]
+					}
+				}		
+			}
+		}
+	}
+	
+	#if negative set to zero, or need to change shock distributions so zero can't happen 
+	for(col in names(paramValues)) set(paramValues, i=which(paramValues[[col]]<0), j=col, value=0)
+	
+	ensDir=file.path(scenario[,Ensemble],scenario[,Scenario])
+	
+	if (dir.exists(file.path(baseOutputDir,ensDir))) {
+		print(paste(ensDir, "exists.  Creating shock file"))
+		write.csv(paramValues, file.path(baseOutputDir,ensDir,"shocks.csv"), row.names=FALSE, quote=FALSE)
+		write.csv(shockValues, file.path(baseOutputDir,ensDir,"shocksRecord.csv"), row.names=FALSE, quote=FALSE)
+	}
+	else{
+		print(paste(ensDir, "does not exist.  Stopping"))
+	}
+}
+
+drawValue <- function(shockType, paramName){
+	
+	randomValue = runif(1, abs(shockDistFile[shock == shockType & pname == paramName]$min), 
+			abs(shockDistFile[shock == shockType & pname == paramName]$max))
+	
+	if (shockDistFile[shock == shockType & pname == paramName]$min <0){
+		randomValue = randomValue*-1
+	}
+	
+	randomValue
+}
+
+baseDataDir = "/exports/csce/eddie/geos/groups/LURG/models/PLUM/plumv2/data"
+baseOutputDir="/exports/csce/eddie/geos/groups/LURG/models/PLUM/output" # "~/Downloads"
+
+shockDistFile = fread(file.path(baseDataDir, "shockDistributions.csv"))
+shockProbs = fread(file.path(baseDataDir,"shockProbabilities.csv"))
+
+ensembleFile = commandArgs(trailingOnly = TRUE)[1]
+
+scenarioTable = fread(file.path(baseDataDir,"sims",ensembleFile))
+
+for(i in 1:nrow(scenarioTable)){
+#first if column exists
+	if("SHOCKS_POSSIBLE" %in% colnames(scenarioTable)){
+		if(scenarioTable[i,SHOCKS_POSSIBLE]){
+			print(paste("Shocks possible in ",scenarioTable[i,Ensemble],scenarioTable[i,Scenario]))
+			createShockFile(scenario = scenarioTable[i])
+		}
+	}
+}
+
+
diff --git a/src/ac/ed/lurg/InternationalMarket.java b/src/ac/ed/lurg/InternationalMarket.java
index 3d93f9d153ef98559bbe6a27cb430e3c9816aad0..a8ef535db5eea52216a970ad353d5358a50e2190 100644
--- a/src/ac/ed/lurg/InternationalMarket.java
+++ b/src/ac/ed/lurg/InternationalMarket.java
@@ -48,7 +48,7 @@ public class InternationalMarket {
 		return initialStockLevels;
 	}
 
-	void determineInternationalTrade(Collection<CountryAgent> countryAgents, double gen2EcDDemand) {
+	void determineInternationalTrade(Collection<CountryAgent> countryAgents, double gen2EcDDemand, Timestep timestep) {
 		CropToDoubleMap totalImportCommodities = new CropToDoubleMap();
 		CropToDoubleMap totalExportCommodities = new CropToDoubleMap();
 		for (CountryAgent ca : countryAgents) {
@@ -77,7 +77,7 @@ public class InternationalMarket {
 			double exportsBeforeTransportLosses = totalExportCommodities.containsKey(crop) ? totalExportCommodities.get(crop) : 0.0;
 
 			double previousStockLevel = stockLevel.get(crop);
-			GlobalPrice adjustedPrice = prevPrice.createWithUpdatedMarketPrices(imports, exportsBeforeTransportLosses, exportsBeforeTransportLosses * ModelConfig.TRANSPORT_LOSSES, (ModelConfig.MARKET_ADJ_PRICE));
+			GlobalPrice adjustedPrice = prevPrice.createWithUpdatedMarketPrices(imports, exportsBeforeTransportLosses, exportsBeforeTransportLosses * ModelConfig.TRANSPORT_LOSSES, (ModelConfig.MARKET_ADJ_PRICE), timestep);
 			LogWriter.println( String.format("Price for %s updated from %s (imports amount %.0f, exports amount %.0f) to %s ",
 							crop.getGamsName(), prevPrice, imports, adjustedPrice.getExportsAfterTransportLosses(), adjustedPrice));
 			worldPrices.put(crop, adjustedPrice);
@@ -95,7 +95,7 @@ public class InternationalMarket {
 			GlobalPrice priceQuantity = worldPrices.get(crop);
 			sbData.append(String.format("%d,%s", timestep.getYear(), crop.getGamsName()));
 			sbData.append(String.format(",%.1f,%.1f", priceQuantity.getImportAmount(), priceQuantity.getExportsAfterTransportLosses()));
-			sbData.append(String.format(",%.3f,%.3f", priceQuantity.getExportPrice(), stockLevel.get(crop)));
+			sbData.append(String.format(",%.3f,%.3f", priceQuantity.getExportPrice(timestep), stockLevel.get(crop)));
 
 			outputFile.write(sbData.toString());
 			outputFile.newLine();
diff --git a/src/ac/ed/lurg/ModelConfig.java b/src/ac/ed/lurg/ModelConfig.java
index 8f4c6f1d31fadb0149a6471d0635047370941363..b9fb3255bfb3b447a94003aafbad38ce6b1831ec 100644
--- a/src/ac/ed/lurg/ModelConfig.java
+++ b/src/ac/ed/lurg/ModelConfig.java
@@ -4,9 +4,17 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
+import ac.ed.lurg.country.SingleCountry;
+import ac.ed.lurg.types.CommodityType;
 import ac.ed.lurg.types.ModelFitType;
+import ac.ed.lurg.types.Parameter;
+import ac.ed.lurg.utils.LogWriter;
+import ac.ed.lurg.utils.StringTabularReader;
 
 public class ModelConfig {
 	
@@ -14,6 +22,8 @@ public class ModelConfig {
 	private static ModelConfig modelConfig;
 	public static final String CONFIG_FILE = System.getProperty("CONFIG_FILE");
 	
+	private static StringTabularReader shocksReader;
+	
 	private ModelConfig() {
 		configFile = new Properties();
 		try {
@@ -95,6 +105,37 @@ public class ModelConfig {
 		return v==null ? defaultBoolean :  Boolean.valueOf(v);
 	}
 
+	
+	public static void readInShocksFile(){
+		
+		shocksReader = new StringTabularReader(",", new String[]{"Year","trendYearValue", "TRADE_BARRIERS_MULTIPLIER", "TRANSPORT_COST", "TECHNOLOGY_CHANGE_ANNUAL_RATE", "MEAT_EFFICIENCY",
+				"FERTILISER_COST_PER_T","OTHER_INTENSITY_COST", "TRANSPORT_LOSSES", "IRRIG_COST_MULTIPLIER", "RUMINANT_CHANGE_ANNUAL_RATE", "MONOGASTRIC_CHANGE_ANNUAL_RATE",
+				"IRRIG_EFF_MULTIPLIER", "FINANCIAL_SPECULATION_MULTIPLIER"});
+		
+		shocksReader.read(ModelConfig.SHOCKS_PARAMETER_FILE);
+
+	}
+	
+	
+	public static Double getParameter(Parameter parameter, int year){
+		
+			Map<String, String> queryMap = new HashMap<String, String>();
+			queryMap.put("Year", Integer.toString(year));
+			
+			Double parameterValue=null;
+			
+			try {
+				Map<String, String> row = shocksReader.querySingle(queryMap);
+				String parameterOfInterest = row.get(parameter.getCsvName());
+				parameterValue = Double.valueOf(parameterOfInterest);
+			}
+			catch (Exception e) {
+				LogWriter.println("Problem finding shock parameter: " + parameter.getCsvName() + ", " + year);
+			}
+
+			return parameterValue;
+	}
+		
 	public static final boolean SUPPRESS_STD_OUTPUT = getBooleanProperty("SUPPRESS_STD_OUTPUT", Boolean.FALSE);
 
 	// Directory information
@@ -127,6 +168,7 @@ public class ModelConfig {
 	public static final String COUNTRY_GROUPING_FILE = DATA_DIR + File.separator + "country_groups.csv";
 	public static final String OTHER_WATER_USES_FILE = DATA_DIR + File.separator + "other_water_uses.csv";
 	public static final String BASE_CEREAL_DEMAND_FILE = DATA_DIR + File.separator + "base_cereal_demand.csv";
+	public static final String SHOCKS_PARAMETER_FILE = OUTPUT_DIR + File.separator+ "shocks.csv";
 
 	// yield data
 	public static final String YIELD_DIR_BASE = getProperty("YIELD_DIR_BASE");
@@ -237,7 +279,7 @@ public class ModelConfig {
 
 	public static final double TECHNOLOGY_CHANGE_ANNUAL_RATE = getDoubleProperty("TECHNOLOGY_CHANGE_ANNUAL_RATE", 0.002);
 	public static final int TECHNOLOGY_CHANGE_START_STEP = getIntProperty("TECHNOLOGY_CHANGE_START_STEP", 0);
-	
+
 	public static final boolean USE_BIOENERGY_TRAJECTORY = getBooleanProperty("USE_BIOENERGY_TRAJECTORY", true);  // false is the old style, i.e. BIOENERGY_CHANGE_ANNUAL_RATE, BIOENERGY_CHANGE_START_YEAR and BIOENERGY_CHANGE_END_YEAR
 	// original way to specify changes in bioenergy
 	public static final double BIOENERGY_CHANGE_ANNUAL_RATE = IS_CALIBRATION_RUN ? 0.0 : getDoubleProperty("BIOENERGY_CHANGE_ANNUAL_RATE", 0.10); // 6.2/2.31/20
@@ -250,11 +292,8 @@ public class ModelConfig {
 //	public static final double BIOENERGY_HEATING_VALUE_GJ_PER_T = getDoubleProperty("BIOENERGY_HEATING_VALUE_GJ_PER_T", 17.5); // GJ per t DM
 	
 	//Dietary stuff
-	public static final boolean ACTIVE_DIETARY_SHIFT = getBooleanProperty("ACTIVE_DIETARY_SHIFT", false);
-	public static final int DIETARY_CHANGE_START_YEAR  = getIntProperty("DIETARY_CHANGE_START_YEAR", 2010);
-	public static final int DIETARY_CHANGE_END_YEAR  = getIntProperty("DIETARY_CHANGE_END_YEAR", 2050);
-	public static final double RUMINANT_CHANGE_ANNUAL_RATE  = getDoubleProperty("RUMINANT_CHANGE_ANNUAL_RATE", 0.05);
-	public static final double MONOGASTRIC_CHANGE_ANNUAL_RATE  = getDoubleProperty("MONOGASTRIC_CHANGE_ANNUAL_RATE", 0.05);
+	public static final double RUMINANT_CHANGE_ANNUAL_RATE  = getDoubleProperty("RUMINANT_CHANGE_ANNUAL_RATE", 0.0);
+	public static final double MONOGASTRIC_CHANGE_ANNUAL_RATE  = getDoubleProperty("MONOGASTRIC_CHANGE_ANNUAL_RATE", 0.00);
 	public static final boolean CONSTANT_DIET_LOW_INCOME = getBooleanProperty("CONSTANT_DIET_LOW_INCOME", false);
 	public static final boolean CONSTANT_DIET_HIGH_INCOME  = getBooleanProperty("CONSTANT_DIET_HIGH_INCOME", false);
 	//below should all sum to zero
@@ -262,20 +301,7 @@ public class ModelConfig {
 	public static final double PULSES_SUB_PROPORTION  = getDoubleProperty("PULSES_SUB_PROPORTION", 0.35);
 	public static final double OILCROPS_SUB_PROPORTION  = getDoubleProperty("OILCROPS_SUB_PROPORTION", 0.05);
 	public static final double STARCHY_ROOTS_SUB_PROPORTION  = getDoubleProperty("STARCHY_ROOTS_SUB_PROPORTION", 0.3);
-	
-	//RUGS limit yield in argentina
-	public static final boolean LIMIT_MAIZE_YIELD_SAMERICA = getBooleanProperty("LIMIT_MAIZE_YIELD_SAMERICA", false);
-	public static final double LIMIT_YIELD_BY  = getDoubleProperty("LIMIT_YIELD_BY", 0.0);
 
-	//RUGS trade changes scenarios
-	
-	public static final int TRADE_START_YEAR  = getIntProperty("TRADE_START_YEAR", 2010);
-	public static final int TRADE_END_YEAR  = getIntProperty("TRADE_END_YEAR", 2010);
-	public static final double TRADE_BARRIER_ANNUAL_CHANGE  = getDoubleProperty("TRADE_BARRIER_ANNUAL_CHANGE", 0.0);
-	public static final double TRADE_LOSSES_ANNUAL_CHANGE  = getDoubleProperty("TRADE_LOSSES_ANNUAL_CHANGE", 0.0);
-	public static final double TRADE_COSTS_ANNUAL_CHANGE = getDoubleProperty("TRADE_COSTS_ANNUAL_CHANGE", 0.0);
-	
-	
 	public static final double MARKET_LAMBA = getDoubleProperty("MARKET_LAMBA", 0.4); // controls international market price adjustment rate
 
 	public static final double POPULATION_AGGREG_LIMIT = getDoubleProperty("POPULATION_AGGREG_LIMIT", 30.0);  // in millions, smaller countries are aggregated on a regional basis
@@ -293,6 +319,7 @@ public class ModelConfig {
 	public static final double OTHER_INTENSITY_PARAM = getDoubleProperty("OTHER_INTENSITY_PARAM", 3.22);
 
 	public static final double IRRIG_COST_SCALE_FACTOR = getDoubleProperty("IRRIG_COST_SCALE_FACTOR", 0.0003);
+	public static final double IRRIG_COST_MULTIPLIER = getDoubleProperty("IRRIG_COST_MULTIPLIER", 1.0);
 	public static final double FERTILISER_COST_PER_T = getDoubleProperty("FERTILISER_COST_PER_T", 1.4); // $500/t, 18% N/t
 	public static final double FERTILISER_MAX_COST = FERTILISER_COST_PER_T * MAX_FERT_AMOUNT/1000;
 	
@@ -300,9 +327,11 @@ public class ModelConfig {
 	public static final double TRANSPORT_LOSSES = getDoubleProperty("TRANSPORT_LOSSES", 0.05);  // in international trade
 	public static final double TRANSPORT_COST = getDoubleProperty("TRANSPORT_COST", 0.1);  // 100 $/t  see Wheat Transportation Profile - USDA
 	public static final double TRADE_BARRIER_FACTOR_DEFAULT = getDoubleProperty("TRADE_BARRIER_FACTOR_DEFAULT", 0.2);  // price factor in international trade, transport cost and real trade barriers
-	public static final double TRADE_BARRIER_ADJ = getDoubleProperty("TRADE_BARRIER_ADJ", 1.0);
+	public static final double TRADE_BARRIER_MULTIPLIER = getDoubleProperty("TRADE_BARRIER_MULTIPLIER", 1.0);
 	public static final boolean ACTIVE_TRADE_BARRIERS = getBooleanProperty("ACTIVE_TRADE_BARRIERS", false);  // if set to true read in barrier information from file, otherwise use default as above
-
+	public static final boolean SHOCKS_POSSIBLE = getBooleanProperty("SHOCKS_POSSIBLE", false);
+	
+	
 	public static final boolean PROTECTED_AREAS_ENABLED = getBooleanProperty("PROTECTED_AREAS_ENABLED", true);
 	public static final double MIN_NATURAL_RATE = getDoubleProperty("MIN_NATURAL_RATE", 0.05);
 	public static final double MAX_CHINA_LAND_EXPANSION_RATE = getDoubleProperty("MAX_CHINA_LAND_EXPANSION_RATE", 0.011*0.4); // 1.1% max forest change 40% of natural land is forest
diff --git a/src/ac/ed/lurg/ModelMain.java b/src/ac/ed/lurg/ModelMain.java
index 6f79d1a3a7bd6833920bc8dad8ec0ca813e1040c..43368a70b0663022947bc0b580fdc91ace7233af 100644
--- a/src/ac/ed/lurg/ModelMain.java
+++ b/src/ac/ed/lurg/ModelMain.java
@@ -91,7 +91,9 @@ public class ModelMain {
 			demandManager = new DemandManagerFromFile(compositeCountryManager);
 		else
 			demandManager = new DemandManagerSSP(ModelConfig.SSP_SCENARIO, baseConsumpManager, compositeCountryManager);
-
+		
+		if (ModelConfig.SHOCKS_POSSIBLE) ModelConfig.readInShocksFile();
+			
 		tradeManager = new TradeManager(compositeCountryManager);
 		currentIrrigationData = getFixedIrrigationData();
 		countryBoundaryRaster = getCountryBoundaryRaster();
@@ -167,7 +169,7 @@ public class ModelMain {
 				clusterIdRaster.putAll(ca.getYieldClusters());
 		}
 		
-		internationalMarket.determineInternationalTrade(countryAgents, gen2EcDDemand);
+		internationalMarket.determineInternationalTrade(countryAgents, gen2EcDDemand, timestep);
 
 		// output results
 		outputTimestepResults(timestep, globalLandUseRaster);
@@ -590,6 +592,7 @@ private void writeDomesticProductionFile(Timestep timestep) {
 	/** Ugly in situ update of currentIrrigationData, better if IrrigationRasterSets were handled more immutably */
 	private void getUpdateIrrigationData(Timestep timestep, YieldRaster yieldSurfaces) {
 		String rootDir = timestep.getYearSubDir(ModelConfig.YIELD_DIR);
+		
 		new IrrigationMaxAmountReader(currentIrrigationData).getRasterDataFromFile(rootDir + File.separator + ModelConfig.IRRIG_MAX_WATER_FILENAME);
 
 		if (!ModelConfig.USE_BLUE_WATER_FILE_IRRIG_CONSTRAINT) {
diff --git a/src/ac/ed/lurg/country/CountryAgent.java b/src/ac/ed/lurg/country/CountryAgent.java
index 189fe04550126b7cadf58b7a357da0d00edafa18..030f7e25366d4af33600f97fb28c43d6c6165192 100644
--- a/src/ac/ed/lurg/country/CountryAgent.java
+++ b/src/ac/ed/lurg/country/CountryAgent.java
@@ -115,18 +115,6 @@ public class CountryAgent {
 		}
 			
 		currentCountryPrices = calculateCountryPrices(worldPrices);
-
-		if(ModelConfig.LIMIT_MAIZE_YIELD_SAMERICA & country.getRegion().equals("Latin America & Caribbean")){
-			 for (Entry<RasterKey, YieldResponsesItem> entry : countryYieldSurfaces.entrySet()) {
-				 YieldResponsesItem yresp = entry.getValue();
-				 if (yresp != null){
-					 for (YieldType yt : YieldType.values()) {
-						 double prevYield = yresp.getYield(yt, CropType.MAIZE);
-						 yresp.setYield(yt,CropType.MAIZE, prevYield*(1-ModelConfig.LIMIT_YIELD_BY));
-					 }
-				 }
-			 }
-		}
 			
 		if (currentProjectedDemand.size() == 0) {
 			LogWriter.printlnError("No demand for country " + country + " so skipping it");
@@ -301,7 +289,7 @@ public class CountryAgent {
 
 		for (CropType c : CropType.getImportedTypes()) {
 			GlobalPrice worldPrice = worldPrices.get(c);
-			CountryPrice prices = new CountryPrice(worldPrice.getCountryImportPrice(tradeBarriers.get(c), currentTimestep.getYear()), worldPrice.getExportPrice());
+			CountryPrice prices = new CountryPrice(worldPrice.getCountryImportPrice(tradeBarriers.get(c), currentTimestep), worldPrice.getExportPrice(currentTimestep));
 			countryPrices.put(c, prices);
 		}
 
diff --git a/src/ac/ed/lurg/country/GlobalPrice.java b/src/ac/ed/lurg/country/GlobalPrice.java
index f59744bbc0b33f42986cd79c101b45f05c7034d4..725042a9c49637ac95fee209c63f4cfb12bc1763 100644
--- a/src/ac/ed/lurg/country/GlobalPrice.java
+++ b/src/ac/ed/lurg/country/GlobalPrice.java
@@ -1,6 +1,8 @@
 package ac.ed.lurg.country;
 
 import ac.ed.lurg.ModelConfig;
+import ac.ed.lurg.Timestep;
+import ac.ed.lurg.types.Parameter;
 import ac.ed.lurg.utils.LogWriter;
 
 public class GlobalPrice {
@@ -20,24 +22,23 @@ public class GlobalPrice {
 		return new GlobalPrice(exportPrice, Double.NaN, Double.NaN, Double.NaN);
 	}
 
-	public double getExportPrice() {
-		return exportPrice;
+	public double getExportPrice(Timestep timestep) {
+		
+		double financialSpeculationMultiplier = (!ModelConfig.SHOCKS_POSSIBLE)? 1.0 : ModelConfig.getParameter(Parameter.FINANCIAL_SPECULATION_MULTIPLIER,timestep.getYear());
+		
+		return exportPrice * financialSpeculationMultiplier;
 	}
 	
-	public double getCountryImportPrice(double countryTradeBarrier, int year) {
-		
-		double tradeBarAdj =0;
-		double tradeLossAdj = 0;
-		double tradeCostAdj = 0;
-		int yearsOfChange = Math.min(ModelConfig.TRADE_END_YEAR - ModelConfig.TRADE_START_YEAR, year - ModelConfig.TRADE_START_YEAR);
+	public double getCountryImportPrice(double countryTradeBarrier, Timestep timestep) {
+
+		int currentYear = timestep.getYear();
 		
-		if (yearsOfChange>0) {
-			tradeBarAdj =  yearsOfChange * ModelConfig.TRADE_BARRIER_ANNUAL_CHANGE;
-			tradeLossAdj = yearsOfChange * ModelConfig.TRADE_LOSSES_ANNUAL_CHANGE;
-			tradeCostAdj = yearsOfChange * ModelConfig.TRADE_COSTS_ANNUAL_CHANGE;
-		}
+		double tradeBarrierMultiplier = (!ModelConfig.SHOCKS_POSSIBLE)? ModelConfig.TRADE_BARRIER_MULTIPLIER: ModelConfig.getParameter(Parameter.TRADE_BARRIERS_MULTIPLIER, currentYear);
+		double transportLosses =(!ModelConfig.SHOCKS_POSSIBLE) ? ModelConfig.TRANSPORT_LOSSES : ModelConfig.getParameter(Parameter.TRANSPORT_LOSSES, currentYear);
+		double transportCosts = (!ModelConfig.SHOCKS_POSSIBLE) ? ModelConfig.TRANSPORT_COST : ModelConfig.getParameter(Parameter.TRANSPORT_COST, currentYear);
 		
-		double importPrice = (exportPrice * (1.0 + countryTradeBarrier*ModelConfig.TRADE_BARRIER_ADJ+tradeBarAdj) / (1.0 - ModelConfig.TRANSPORT_LOSSES+tradeLossAdj)) + ModelConfig.TRANSPORT_COST+tradeCostAdj;
+		double importPrice = (getExportPrice(timestep) * (1.0 + countryTradeBarrier*tradeBarrierMultiplier) 
+								/ (1.0 - transportLosses)) + transportCosts;
 		return importPrice;
 	}
 
@@ -57,7 +58,7 @@ public class GlobalPrice {
 		return transportLosses;
 	}
 
-	public GlobalPrice createWithUpdatedMarketPrices(double imports, double exportsBeforeTransportLosses, double transportLosses, boolean adjustPrice) {
+	public GlobalPrice createWithUpdatedMarketPrices(double imports, double exportsBeforeTransportLosses, double transportLosses, boolean adjustPrice, Timestep timestep) {
 		double exportsAfterTransportLosses = exportsBeforeTransportLosses - transportLosses;
 		if (imports > 0 || exportsAfterTransportLosses > 0) {
 			double ratio;
@@ -70,10 +71,10 @@ public class GlobalPrice {
 			double adjustment = adjustPrice ? Math.exp(ratio * ModelConfig.MARKET_LAMBA) : 1.0;
 			//adjustment = Math.min(adjustment, 2.0);  // can only double in a time step
 			//adjustment = Math.max(adjustment, 0.5); // can only half in a time step
-			return new GlobalPrice(exportPrice * adjustment, imports, exportsBeforeTransportLosses, transportLosses);
+			return new GlobalPrice(getExportPrice(timestep) * adjustment, imports, exportsBeforeTransportLosses, transportLosses);
 		}
 		else {
-			LogWriter.printlnError(String.format("Price for not updated (still %s), as no imports and no exports for it", exportPrice));
+			LogWriter.printlnError(String.format("Price for not updated (still %s), as no imports and no exports for it", getExportPrice(timestep)));
 			return this;
 		}
 	}
diff --git a/src/ac/ed/lurg/country/gams/GamsCountryInput.java b/src/ac/ed/lurg/country/gams/GamsCountryInput.java
index 6272692d072e6f8c02db11d4dd180e6415c9de4f..9e244d8ccd872485850b52e73ce6803633cc76c6 100644
--- a/src/ac/ed/lurg/country/gams/GamsCountryInput.java
+++ b/src/ac/ed/lurg/country/gams/GamsCountryInput.java
@@ -55,6 +55,8 @@ public class GamsCountryInput {
 	}
 
 	public double getMeatEfficiency() {
+		
+		
 		return ModelConfig.MEAT_EFFICIENCY;  // this is already handled by the feed conversion efficiency for each animal product
 	}
 
diff --git a/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java b/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java
index c29ab3645f11ae73f9aee50c7627b202dd9175bc..74fc28b30a278bad406c18562635162dc68f2e14 100644
--- a/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java
+++ b/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java
@@ -29,6 +29,7 @@ import ac.ed.lurg.landuse.LandUseItem;
 import ac.ed.lurg.types.CommodityType;
 import ac.ed.lurg.types.CropType;
 import ac.ed.lurg.types.LandCoverType;
+import ac.ed.lurg.types.Parameter;
 import ac.ed.lurg.utils.LazyHashMap;
 import ac.ed.lurg.utils.LogWriter;
 import ac.ed.lurg.yield.YieldResponsesItem;
@@ -163,10 +164,12 @@ public class GamsLocationOptimiser {
 		GAMSParameter irrigConstraintP = inDB.addParameter("irrigConstraint", 1);
 		Map<Integer, ? extends IrrigationItem> irrigationData = inputData.getIrrigationCosts();
 		
+		double irrigCostMultiplier = (!ModelConfig.SHOCKS_POSSIBLE) ? 1.0 : ModelConfig.getParameter(Parameter.IRRIG_COST_MULTIPLIER, inputData.getTimestep().getYear());
+		
 		for (Entry<Integer, ? extends IrrigationItem> entry : irrigationData.entrySet()) {
 			Integer locationId = entry.getKey();
 			IrrigationItem irrigCostItem = entry.getValue();
-			double irrigCost = irrigCostItem.getIrrigCost();
+			double irrigCost = irrigCostItem.getIrrigCost()*irrigCostMultiplier;
 			double irrigConstraint = irrigCostItem.getIrrigConstraint();
 			if (DEBUG) LogWriter.println(String.format("  %d  \t %.5f,\t %.1f", locationId, irrigCost, irrigConstraint));
 			setGamsParamValue(irrigCostP.addRecord(Integer.toString(locationId)), irrigCost, 5);
@@ -273,14 +276,20 @@ public class GamsLocationOptimiser {
 			setGamsParamValue(seedAndWasteRateP.addRecord(crop.getGamsName()), seedAndWasteRate, 3);
 		}
 
+		//below in case running without shocks to use original values in model config 
+		
+		double meatEff = (!ModelConfig.SHOCKS_POSSIBLE) ? ModelConfig.MEAT_EFFICIENCY: ModelConfig.getParameter(Parameter.MEAT_EFFICIENCY, inputData.getTimestep().getYear());
+		double fertCost = (!ModelConfig.SHOCKS_POSSIBLE) ? ModelConfig.FERTILISER_MAX_COST : ModelConfig.getParameter(Parameter.FERTILISER_COST_PER_T, inputData.getTimestep().getYear()) * ModelConfig.MAX_FERT_AMOUNT/1000;
+		double otherIntCost = (!ModelConfig.SHOCKS_POSSIBLE) ? ModelConfig.OTHER_INTENSITY_COST : ModelConfig.getParameter(Parameter.OTHER_INTENSITY_COST, inputData.getTimestep().getYear());
+			
 		LogWriter.print("\n");
 		addScalar(inDB, "cropIncCost", ModelConfig.CROP_INCREASE_COST, 3);		
 		addScalar(inDB, "cropDecCost", ModelConfig.CROP_DECREASE_COST, 3);		
 		addScalar(inDB, "pastureDecCost", ModelConfig.PASTURE_DECREASE_COST, 3);		
 		addScalar(inDB, "pastureIncCost", ModelConfig.PASTURE_INCREASE_COST, 3);		
-		addScalar(inDB, "meatEfficency", countryInput.getMeatEfficiency(), 3);		
-		addScalar(inDB, "fertiliserUnitCost", ModelConfig.FERTILISER_MAX_COST, 3);
-		addScalar(inDB, "otherICost",ModelConfig.OTHER_INTENSITY_COST, 3);
+		addScalar(inDB, "meatEfficency", meatEff, 3);		
+		addScalar(inDB, "fertiliserUnitCost", fertCost, 3);
+		addScalar(inDB, "otherICost",otherIntCost, 3);
 		addScalar(inDB, "otherIParam", ModelConfig.OTHER_INTENSITY_PARAM, 3);
 		addScalar(inDB, "unhandledCropRate", ModelConfig.UNHANDLED_CROP_RATE, 3);
 		addScalar(inDB, "setAsideRate", ModelConfig.SETASIDE_RATE, 5);
diff --git a/src/ac/ed/lurg/demand/AbstractDemandManager.java b/src/ac/ed/lurg/demand/AbstractDemandManager.java
index d4d7e138f990b99f272db284802bffbdb6c3070d..cbdf9dc5ec8bd67977cc2311bf7132b8efe918c6 100644
--- a/src/ac/ed/lurg/demand/AbstractDemandManager.java
+++ b/src/ac/ed/lurg/demand/AbstractDemandManager.java
@@ -10,6 +10,7 @@ import ac.ed.lurg.country.CompositeCountryManager;
 import ac.ed.lurg.country.SingleCountry;
 import ac.ed.lurg.types.CommodityType;
 import ac.ed.lurg.types.CropType;
+import ac.ed.lurg.types.Parameter;
 import ac.ed.lurg.utils.LogWriter;
 
 public abstract class AbstractDemandManager {
@@ -72,11 +73,10 @@ public abstract class AbstractDemandManager {
 
 	public Map<CommodityType, Double> dietaryAdjustment(Map<CommodityType, Double> originalFoodDemandMap, int year) {
 		
-		int yearsOfChange = Math.min(ModelConfig.DIETARY_CHANGE_END_YEAR - ModelConfig.DIETARY_CHANGE_START_YEAR,
-				year - ModelConfig.DIETARY_CHANGE_START_YEAR);
-		double monoDemandAdj = yearsOfChange > 0 ? (yearsOfChange * CommodityType.MONOGASTRICS.demandChangeRate()) : 0.0;
-		double rumDemandAdj = yearsOfChange > 0 ? (yearsOfChange * CommodityType.RUMINANTS.demandChangeRate()) : 0.0;
+		double monoDemandAdj = (!ModelConfig.SHOCKS_POSSIBLE) ? 0.0 : ModelConfig.getParameter(Parameter.MONOGASTRIC_CHANGE_ANNUAL_RATE, year);
+		double rumDemandAdj = (!ModelConfig.SHOCKS_POSSIBLE) ? 0.0 : ModelConfig.getParameter(Parameter.RUMINANT_CHANGE_ANNUAL_RATE, year);
 
+		
 		Double monogastricDemand = originalFoodDemandMap.get(CommodityType.MONOGASTRICS);
 		double monogastricEnergyShortfall = (monogastricDemand != null)
 				? monogastricDemand * monoDemandAdj * CommodityType.MONOGASTRICS.getEJPerMT() : 0.0;
@@ -92,7 +92,7 @@ public abstract class AbstractDemandManager {
 
 			if (originalCommodityDemand != null) {
 				if (commodity.isAnimalProduct()) {
-					double adj = yearsOfChange > 0 ? (yearsOfChange * commodity.demandChangeRate()) : 0.0;
+					double adj = commodity.getGamsName() == "ruminants" ? rumDemandAdj : monoDemandAdj;
 					updatedFoodDemandMap.put(commodity,
 							originalCommodityDemand*(1-adj));
 				} else {
diff --git a/src/ac/ed/lurg/demand/DemandManagerFromFile.java b/src/ac/ed/lurg/demand/DemandManagerFromFile.java
index 261e7ec1b05f63ba0dfacbb10a66ed52349c0399..5c336dcaef87b7e559ee7960ce7e0f5326234ff7 100644
--- a/src/ac/ed/lurg/demand/DemandManagerFromFile.java
+++ b/src/ac/ed/lurg/demand/DemandManagerFromFile.java
@@ -43,7 +43,7 @@ public class DemandManagerFromFile extends AbstractDemandManager {
 			}
 		}
 		
-		if(!ModelConfig.ACTIVE_DIETARY_SHIFT){
+		if(!ModelConfig.SHOCKS_POSSIBLE){
 			return foodDemandMap;
 		}
 		return dietaryAdjustment(foodDemandMap, year);
diff --git a/src/ac/ed/lurg/demand/DemandManagerSSP.java b/src/ac/ed/lurg/demand/DemandManagerSSP.java
index 61641d12d0daf0deef4857946c876137f5c75ad6..2d934230d39c4f30de01a90e4b3e00e0a2413af7 100644
--- a/src/ac/ed/lurg/demand/DemandManagerSSP.java
+++ b/src/ac/ed/lurg/demand/DemandManagerSSP.java
@@ -53,7 +53,7 @@ public class DemandManagerSSP extends AbstractDemandManager {
 			foodDemandMap.put(commodity, d);
 		}
 
-		if(!ModelConfig.ACTIVE_DIETARY_SHIFT){
+		if(!ModelConfig.SHOCKS_POSSIBLE){
 			return foodDemandMap;
 		}
 		return dietaryAdjustment(foodDemandMap, year);
diff --git a/src/ac/ed/lurg/landuse/IrrigationItem.java b/src/ac/ed/lurg/landuse/IrrigationItem.java
index 2a5a544b9e19c8f4128453278d909128185adf11..49dd5934bf21cb73dba99a4f03d4e414d2e23190 100644
--- a/src/ac/ed/lurg/landuse/IrrigationItem.java
+++ b/src/ac/ed/lurg/landuse/IrrigationItem.java
@@ -33,6 +33,10 @@ public class IrrigationItem implements RasterItem {
 			return ModelConfig.PASTURE_MAX_IRRIGATION_RATE;
 
 		Double d = maxIrrigAmounts.get(crop);
+		
+		//double irrigEffMultiplier = (!ModelConfig.SHOCKS_POSSIBLE) ? ModelConfig.IRRIG_EFF_MULTIPLIER : ModelConfig.getParameter(IRRIG_EFF_MULTIPLIER, timestep.getYear());
+		
+		
 		return d==null ? 0.0 : d.doubleValue();
 	}
 	
diff --git a/src/ac/ed/lurg/types/CommodityType.java b/src/ac/ed/lurg/types/CommodityType.java
index 7d029f59f6257f1b5eea06af0088465f7e1338b8..3f2a843b183c285211fea86be6999a045b2ec535 100644
--- a/src/ac/ed/lurg/types/CommodityType.java
+++ b/src/ac/ed/lurg/types/CommodityType.java
@@ -9,12 +9,12 @@ import ac.ed.lurg.ModelConfig;
 
 public enum CommodityType {
 
-	CEREALS("Cereals", "cereals", false, null, 0.0115335812,ModelConfig.CEREALS_SUB_PROPORTION,Double.NaN),
-	OILCROPS("Oilcrops", "oilcrops", false, CropType.OILCROPS, 0.0243500061,ModelConfig.OILCROPS_SUB_PROPORTION,Double.NaN),
-	PULSES("Pulses", "pulses", false, CropType.PULSES, 0.0146872440,ModelConfig.PULSES_SUB_PROPORTION,Double.NaN),
-	STARCHY_ROOTS("Starchy Roots", "starchyRoots", false, CropType.STARCHY_ROOTS, 0.0034561229,ModelConfig.STARCHY_ROOTS_SUB_PROPORTION,Double.NaN),
-	MONOGASTRICS("Monogastrics", "monogastrics", true, CropType.MONOGASTRICS, 0.0019100435, Double.NaN, ModelConfig.MONOGASTRIC_CHANGE_ANNUAL_RATE),
-	RUMINANTS("Ruminants", "ruminants", true, CropType.RUMINANTS, 0.0009951162, Double.NaN, ModelConfig.RUMINANT_CHANGE_ANNUAL_RATE);
+	CEREALS("Cereals", "cereals", false, null, 0.0115335812,ModelConfig.CEREALS_SUB_PROPORTION),
+	OILCROPS("Oilcrops", "oilcrops", false, CropType.OILCROPS, 0.0243500061,ModelConfig.OILCROPS_SUB_PROPORTION),
+	PULSES("Pulses", "pulses", false, CropType.PULSES, 0.0146872440,ModelConfig.PULSES_SUB_PROPORTION),
+	STARCHY_ROOTS("Starchy Roots", "starchyRoots", false, CropType.STARCHY_ROOTS, 0.0034561229,ModelConfig.STARCHY_ROOTS_SUB_PROPORTION),
+	MONOGASTRICS("Monogastrics", "monogastrics", true, CropType.MONOGASTRICS, 0.0019100435, Double.NaN),
+	RUMINANTS("Ruminants", "ruminants", true, CropType.RUMINANTS, 0.0009951162, Double.NaN);
 
 	private String faoName;
 	private String gamsName;
@@ -22,16 +22,14 @@ public enum CommodityType {
 	private CropType cropTypeMapping;
 	private double ejPerMt;
 	private double meatSubstitutionProportion;
-	private double demandChangeRate;
 	
-	CommodityType (String faoName, String gamsName, boolean isAnimalProduct, CropType cropTypeMapping, double energyPerTon, double meatSubstitutionProportion,double demandChangeRate) {
+	CommodityType (String faoName, String gamsName, boolean isAnimalProduct, CropType cropTypeMapping, double energyPerTon, double meatSubstitutionProportion) {
 		this.faoName = faoName;
 		this.gamsName = gamsName;
 		this.isAnimalProduct = isAnimalProduct;
 		this.cropTypeMapping = cropTypeMapping;
 		this.ejPerMt = energyPerTon; //energy EJ per Mt
 		this.meatSubstitutionProportion = meatSubstitutionProportion;
-		this.demandChangeRate =demandChangeRate;
 	}
 	
 	private static final Map<String, CommodityType> faoNameCache = new HashMap<String, CommodityType>();
@@ -74,10 +72,6 @@ public enum CommodityType {
 		return meatSubstitutionProportion;
 	}
 	
-	public double demandChangeRate(){
-		return demandChangeRate;
-	}
-	
 	public Collection<CropType> getCropTypes(){
 		Collection<CropType> comms = new HashSet<CropType>();
 		if (this == CEREALS)  {
diff --git a/src/ac/ed/lurg/types/Parameter.java b/src/ac/ed/lurg/types/Parameter.java
new file mode 100644
index 0000000000000000000000000000000000000000..9dd25305f2ef1a8ea5b7d0351a2d28ce6c7cf28a
--- /dev/null
+++ b/src/ac/ed/lurg/types/Parameter.java
@@ -0,0 +1,29 @@
+package ac.ed.lurg.types;
+
+public enum Parameter {
+
+	TRADE_BARRIERS_MULTIPLIER("TRADE_BARRIERS_MULTIPLIER"),
+	TRANSPORT_LOSSES("TRANSPORT_LOSSES"),
+	TRANSPORT_COST("TRANSPORT_COST"),
+	TECHNOLOGY_CHANGE_ANNUAL_RATE("TECHNOLOGY_CHANGE_ANNUAL_RATE"),
+	IRRIG_COST_MULTIPLIER("IRRIG_COST_MULTIPLIER"), 
+	FERTILISER_COST_PER_T("FERTILISER_COST_PER_T"),
+	OTHER_INTENSITY_COST("OTHER_INTENSITY_COST"),
+	RUMINANT_CHANGE_ANNUAL_RATE("RUMINANT_CHANGE_ANNUAL_RATE"),
+	MONOGASTRIC_CHANGE_ANNUAL_RATE("MONOGASTRIC_CHANGE_ANNUAL_RATE"),
+	MEAT_EFFICIENCY("MEAT_EFFICIENCY"),
+	IRRIG_EFF_MULTIPLIER("IRRIG_EFF_MULTIPLIER"), //not implemented yet as need to double check something with PA 
+	FINANCIAL_SPECULATION_MULTIPLIER("FINANCIAL_SPECULATION_MULTIPLIER"); 
+
+	private String csvName;
+	
+	
+	Parameter (String csvName) {
+		this.csvName = csvName;
+	}
+	
+	public String getCsvName() {
+		return csvName;
+	}
+	
+}
diff --git a/src/ac/ed/lurg/yield/LPJYieldResponseMapReader.java b/src/ac/ed/lurg/yield/LPJYieldResponseMapReader.java
index 9c18a78d7bce6d9f333f247123853f031d018c67..86d01a80f4dcb2f9bbe3f68b2011707ef2df14fe 100644
--- a/src/ac/ed/lurg/yield/LPJYieldResponseMapReader.java
+++ b/src/ac/ed/lurg/yield/LPJYieldResponseMapReader.java
@@ -8,6 +8,7 @@ import ac.ed.lurg.Timestep;
 import ac.ed.lurg.types.CropType;
 import ac.ed.lurg.types.FertiliserRate;
 import ac.ed.lurg.types.IrrigationRate;
+import ac.ed.lurg.types.Parameter;
 import ac.ed.lurg.types.YieldType;
 import ac.ed.lurg.utils.LogWriter;
 import ac.ed.lurg.utils.WatchForFile;
@@ -41,7 +42,9 @@ public class LPJYieldResponseMapReader {
 		int timeStepForTechChange = ModelConfig.IS_CALIBRATION_RUN ? ModelConfig.START_TIMESTEP : timestep.getTimestep();  // we don't want technology to change in calibration, but sometime we run tech change backwards
 		int yearsOfTech = (timeStepForTechChange - ModelConfig.TECHNOLOGY_CHANGE_START_STEP) * ModelConfig.TIMESTEP_SIZE;
 		
-		techYieldAdj = 1.0 +  yearsOfTech * ModelConfig.TECHNOLOGY_CHANGE_ANNUAL_RATE;
+		double techChangeAnnualRate = (!ModelConfig.SHOCKS_POSSIBLE)? ModelConfig.TECHNOLOGY_CHANGE_ANNUAL_RATE: ModelConfig.getParameter(Parameter.TECHNOLOGY_CHANGE_ANNUAL_RATE, timestep.getYear());
+		
+		techYieldAdj = 1.0 +  yearsOfTech * techChangeAnnualRate;
 		LogWriter.println("Yield adjustment for technology for " + timestep + " is " + techYieldAdj);
 		
 		YieldRaster yieldRaster = new YieldRaster(rasterProj);