diff --git a/data/agriculturalGdpFraction.csv b/data/agriculturalGdpFraction.csv
new file mode 100644
index 0000000000000000000000000000000000000000..05d7e02e86816023b96f1f2e6b5da88dfc2d3ef9
--- /dev/null
+++ b/data/agriculturalGdpFraction.csv
@@ -0,0 +1,194 @@
+Country,fraction
+Afghanistan,0.2581565808
+Albania,0.1832942988
+Algeria,0.08708967689
+Angola,0.06199380534
+Antigua and Barbuda,0.01700428661
+Argentina,0.0661401926
+Armenia,0.179106503
+Aruba,0.00401357843
+Australia,0.02367137746
+Austria,0.01279189297
+Azerbaijan,0.06099559543
+Bahamas,0.01011714549
+Bahrain,0.00292198203
+Bangladesh,0.16793504
+Barbados,0.0135735265
+Belarus,0.07945372955
+Belgium,0.00746337589
+Belize,0.1228766543
+Benin,0.231954022
+Bermuda,0.00775529553
+Bhutan,0.1796140278
+Bolivia (Plurinational State of),0.1038678025
+Bosnia and Herzegovina,0.0700575211
+Botswana,0.02340370127
+Brazil,0.04387319845
+Brunei Darussalam,0.0077281516
+Bulgaria,0.04980568509
+Burkina Faso,0.3242746123
+Burundi,0.3688254133
+Cabo Verde,0.08292752365
+Cambodia,0.3142795083
+Cameroon,0.1376563025
+Canada,0.01544013257
+Central African Republic,0.3529591252
+Chad,0.5222986505
+Chile,0.03683433961
+China,0.09634029424
+Colombia,0.06358310428
+Comoros,0.2989714596
+Congo,0.04417626555
+Costa Rica,0.06560268357
+Cote d'Ivoire,0.2266061304
+Croatia,0.03604404619
+Cuba,0.03835602436
+Cyprus,0.02097669337
+Czechia,0.02086215145
+Democratic People's Republic of Korea,0.02334943788
+Democratic Republic of the Congo,0.2088374509
+Denmark,0.01180696337
+Djibouti,0.01829220217
+Dominica,0.1216757392
+Dominican Republic,0.0602685663
+Ecuador,0.09313812312
+Egypt,0.1261418982
+El Salvador,0.06436895085
+Equatorial Guinea,0.01238719632
+Eritrea,0.204733031
+Estonia,0.02862890396
+Ethiopia,0.4180687189
+Fiji,0.1010639784
+Finland,0.02302931645
+France,0.01559701231
+French Polynesia,0.04599999962
+Gabon,0.04190003454
+Gambia,0.2364791771
+Georgia,0.08885716567
+Germany,0.00735886747
+Ghana,0.2623913844
+Greece,0.03237217008
+Greenland,0.1521904781
+Grenada,0.04633166577
+Guatemala,0.1112852289
+Guinea,0.1735996962
+Guinea-Bissau,0.4450191865
+Guyana,0.2114192794
+Haiti,0.212288354
+Honduras,0.1232148999
+Hungary,0.03563392712
+Iceland,0.05471501845
+India,0.1689942691
+Indonesia,0.1369005133
+Iran (Islamic Republic of),0.07585279186
+Iraq,0.0500388504
+Ireland,0.00975278487
+Israel,0.01450977299
+Italy,0.01926645469
+Jamaica,0.0547841756
+Japan,0.01092310337
+Jordan,0.03739654856
+Kazakhstan,0.05119983175
+Kenya,0.2475334772
+Kiribati,0.2352963321
+Kosovo,0.1271282639
+Kuwait,0.00342516546
+Kyrgyzstan,0.2003410177
+Lao People's Democratic Republic,0.2222707114
+Latvia,0.03421218766
+Lebanon,0.03998841362
+Lesotho,0.05383849651
+Liberia,0.5035707916
+Libya,0.02190232387
+Lithuania,0.03490220068
+Luxembourg,0.00302405387
+Macau,0.00060012319
+Madagascar,0.2481731698
+Malawi,0.2938470303
+Malaysia,0.09440037951
+Maldives,0.05934487638
+Mali,0.3418386289
+Malta,0.01443496596
+Marshall Islands,0.1359720386
+Mauritania,0.2186368236
+Mauritius,0.03909741671
+Mexico,0.03153112377
+Micronesia (Federated States of),0.2521983526
+Mongolia,0.1512350298
+Montenegro,0.07936906575
+Morocco,0.124855228
+Mozambique,0.2509941642
+Myanmar,0.3603517688
+Namibia,0.08060025646
+Nepal,0.3195230878
+Netherlands,0.01734523
+New Caledonia,0.037
+New Zealand,0.07210339424
+Nicaragua,0.1669256421
+Niger,0.3795415556
+Nigeria,0.2335314558
+Norway,0.01345390077
+Oman,0.01394111816
+Pakistan,0.2294185908
+Palau,0.03711472668
+Panama,0.03942828207
+Papua New Guinea,0.1944835157
+Paraguay,0.119436435
+Peru,0.06899552714
+Philippines,0.1214251337
+Poland,0.02667672178
+Portugal,0.02023238685
+Puerto Rico,0.00703642781
+Qatar,0.00117858758
+Republic of Korea,0.02334943788
+Republic of Moldova,0.1149674725
+Romania,0.05857877118
+Russian Federation,0.03641176135
+Rwanda,0.3006284909
+Saint Kitts and Nevis,0.01228199508
+Saint Lucia,0.02783139767
+Saint Vincent and the Grenadines,0.05964641049
+Samoa,0.1068053547
+Sao Tome and Principe,0.1093036621
+Saudi Arabia,0.02545932478
+Senegal,0.1400431336
+Serbia,0.06908240365
+Sierra Leone,0.5248472462
+Singapore,0.00039518565
+Slovakia,0.03331109761
+Slovenia,0.01894128906
+Solomon Islands,0.3441094511
+Somalia,0.627
+South Africa,0.02375722081
+South Sudan,0.07349285354
+Spain,0.02404780229
+Sri Lanka,0.09958601909
+Sudan,0.2826523631
+Suriname,0.09018533172
+Swaziland,0.1016397857
+Sweden,0.01280729805
+Switzerland,0.007442333
+Tajikistan,0.2129757047
+Thailand,0.101581181
+The former Yugoslav Republic of Macedonia,0.09816396315
+Togo,0.353426866
+Tonga,0.1661701566
+Trinidad and Tobago,0.00442886034
+Tunisia,0.08793431968
+Turkey,0.07798347154
+Turkmenistan,0.1187436765
+Tuvalu,0.2192198904
+Uganda,0.2462129706
+Ukraine,0.08337232035
+United Arab Emirates,0.00857184804
+United Kingdom,0.00604061786
+United Republic of Tanzania,0.2534671393
+United States of America,0.01111512627
+Uruguay,0.07986460913
+Uzbekistan,0.2224703387
+Vanuatu,0.2265324542
+Venezuela (Bolivarian Republic of),0.04631998867
+Viet Nam,0.1873509988
+Yemen,0.08833806231
+Zambia,0.1011677284
+Zimbabwe,0.1253035863
diff --git a/src/ac/ed/lurg/InternationalMarket.java b/src/ac/ed/lurg/InternationalMarket.java
index 3c329fd61d1a3383803588de7004125a80c6dbeb..6a4b9fa17673069fd2330916dff5e110f0d36b9c 100644
--- a/src/ac/ed/lurg/InternationalMarket.java
+++ b/src/ac/ed/lurg/InternationalMarket.java
@@ -41,6 +41,7 @@ public class InternationalMarket {
 	void determineInternationalTrade(Collection<AbstractCountryAgent> countryAgents, double gen2EcDDemand, Timestep timestep) {
 		CropToDoubleMap totalImportCommodities = new CropToDoubleMap();
 		CropToDoubleMap totalExportCommodities = new CropToDoubleMap();
+		CropToDoubleMap totalProduction = new CropToDoubleMap();
 		for (AbstractCountryAgent ca : countryAgents) {
 
 			// Get values for world input costs
@@ -50,6 +51,7 @@ public class InternationalMarket {
 				CropType c = entry.getKey();
 
 				double countryNetImports = entry.getValue().getShockedNetImports();
+				totalProduction.incrementValue(c, (entry.getValue().getProductionExpected()-entry.getValue().getProductionShock()));
 				
 				if (countryNetImports > 0)
 					totalImportCommodities.incrementValue(c, countryNetImports);
@@ -69,7 +71,7 @@ public class InternationalMarket {
 			double exportsBeforeTransportLosses = totalExportCommodities.containsKey(crop) ? totalExportCommodities.get(crop) : 0.0;
 			double previousStockLevel = stockLevel.get(crop); 
 			double transportLossRate=(!ModelConfig.SHOCKS_POSSIBLE) ? ModelConfig.TRANSPORT_LOSSES : ModelConfig.getParameter(Parameter.TRANSPORT_LOSSES, timestep.getYear());
-			GlobalPrice adjustedPrice = prevPrice.createWithUpdatedMarketPrices(imports, exportsBeforeTransportLosses, exportsBeforeTransportLosses * transportLossRate, (ModelConfig.MARKET_ADJ_PRICE), timestep);
+			GlobalPrice adjustedPrice = prevPrice.createWithUpdatedMarketPrices(imports, exportsBeforeTransportLosses, exportsBeforeTransportLosses * transportLossRate, (ModelConfig.MARKET_ADJ_PRICE), timestep, totalProduction.get(crop));
 			LogWriter.println( String.format("Price for %s updated from %s (imports amount %.1f, exports amount %.1f) to %s ",
 							crop.getGamsName(), prevPrice, imports, adjustedPrice.getExportsAfterTransportLosses(), adjustedPrice));
 			worldPrices.put(crop, adjustedPrice);
diff --git a/src/ac/ed/lurg/ModelConfig.java b/src/ac/ed/lurg/ModelConfig.java
index e7207624674d1e37e65ed871f49d71e2a22bdf6e..2176b2fe1fc1f1f531340e5622340dfae40feb89 100755
--- a/src/ac/ed/lurg/ModelConfig.java
+++ b/src/ac/ed/lurg/ModelConfig.java
@@ -177,6 +177,7 @@ public class ModelConfig {
 	public static final String ANIMAL_RATES_FILE = DATA_DIR + File.separator + "animal_numbers.csv";;
 	public static final String INITIAL_CONSUMER_PRICE_FILE = DATA_DIR + File.separator + "consumerprices.csv";;
 	public static final String PRODUCTIONSHOCKS_PARAMETER_FILE = getProperty("PRODUCTIONSHOCKS_PARAMETER_FILE", OUTPUT_DIR + File.separator+ "productionShocks.csv");
+	public static final String GDP_FRACTIONS_FILE = DATA_DIR + File.separator + "agriculturalGdpFraction.csv";
 
 	// yield data
 	public static final String YIELD_DIR_BASE = getProperty("YIELD_DIR_BASE");
diff --git a/src/ac/ed/lurg/country/AgriculturalGDPManager.java b/src/ac/ed/lurg/country/AgriculturalGDPManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ed45b66ab46485a2ce2c8cb0cfab141a9aac8e4
--- /dev/null
+++ b/src/ac/ed/lurg/country/AgriculturalGDPManager.java
@@ -0,0 +1,63 @@
+package ac.ed.lurg.country;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import ac.ed.lurg.ModelConfig;
+import ac.ed.lurg.utils.LogWriter;
+
+
+public class AgriculturalGDPManager {
+
+	private static final int COUNTRY_COL = 0; 
+	private static final int FRACTION_COL = 1; 
+	
+	private Map<SingleCountry, Double> fractionsMap = new HashMap<SingleCountry, Double>();
+
+	public AgriculturalGDPManager() {
+		read();
+	}
+
+
+	public double getProportion(SingleCountry c) {
+	LogWriter.println("country in get prop " + c);
+		return fractionsMap.get(c);
+	}
+	
+	private void read() {
+
+		String filename = ModelConfig.GDP_FRACTIONS_FILE;
+		try {
+			BufferedReader fitReader = new BufferedReader(new FileReader(filename)); 
+			String line, countryName;
+			Double proportion;
+			fitReader.readLine(); // read header
+
+			while ((line=fitReader.readLine()) != null) {
+				String[] tokens = line.split(",");
+				
+				if (tokens.length < 2)
+					LogWriter.printlnError("Too few columns in " + filename + ", " + line);
+				
+				countryName = tokens[COUNTRY_COL];
+				proportion = Double.parseDouble(tokens[FRACTION_COL]);
+				
+				SingleCountry country = CountryManager.getForName(countryName);
+				
+				fractionsMap.put(country,proportion);
+				LogWriter.println("country in fractionsMap " + fractionsMap.get(country));
+				
+			} 
+			fitReader.close(); 
+		
+		} catch (IOException e) {
+			LogWriter.printlnError("Failed in reading gdp fractions file");
+			LogWriter.print(e);
+		}
+		LogWriter.println("Processed " + filename);
+	}
+	
+}
diff --git a/src/ac/ed/lurg/country/CountryAgent.java b/src/ac/ed/lurg/country/CountryAgent.java
index 06736d5c22b9fe93de0bab0b776ae90282185aaf..bf795fbe5acba73c4b9e16cce31b134222db21ac 100644
--- a/src/ac/ed/lurg/country/CountryAgent.java
+++ b/src/ac/ed/lurg/country/CountryAgent.java
@@ -225,6 +225,20 @@ public class CountryAgent extends AbstractCountryAgent {
 		
 		return commPricePlum;
 	}
+	
+	public void shockGDP() {
+
+		double totalProduction = getTotalProduction();
+		double shockMagnitude = 0.0;
+		Map<CropType, CropUsageData> cropUsages = previousGamsRasterOutput.getCropUsageData();
+
+		for (CropType crop : CropType.getImportedTypes())  {	
+
+			if(cropUsages.get(crop).getProductionExpected() != 0)
+				shockMagnitude += (cropUsages.get(crop).getProductionShock() /cropUsages.get(crop).getProductionExpected()) * (cropUsages.get(crop).getProductionExpected()/totalProduction);	
+		}	
+		demandManager.updateGdpLossesFromShock(country, currentTimestep.getYear(), shockMagnitude);
+	}
 
 	public RasterSet<LandUseItem> getLandUses() {
 		return previousGamsRasterOutput.getLandUses();
@@ -233,4 +247,12 @@ public class CountryAgent extends AbstractCountryAgent {
 	public Map<CropType, CropUsageData> getCropUsageData() {
 		return previousGamsRasterOutput.getCropUsageData();
 	}
+	
+	public double getTotalProduction() {
+		double totalProduction = 0;
+		for (CropType crop : CropType.getImportedTypes()) { //assuming pasture and set aside not part of agricultural value, valid or not?
+			totalProduction +=  previousGamsRasterOutput.getCropUsageData().get(crop).getProductionExpected();
+		}	
+		return totalProduction;
+	}
 }
\ No newline at end of file
diff --git a/src/ac/ed/lurg/country/CountryAgentManager.java b/src/ac/ed/lurg/country/CountryAgentManager.java
index 273bd8b4755d69d6a3a732320d057fe7566acb59..256b087f15379074811758b143deae3f92034294 100644
--- a/src/ac/ed/lurg/country/CountryAgentManager.java
+++ b/src/ac/ed/lurg/country/CountryAgentManager.java
@@ -56,7 +56,7 @@ public class CountryAgentManager {
 		}
 
 		Map<CropType, Double> tradeBarriers = tradeBarrierManager.getTradeBarriers(cc);
-
+		
 		if (ModelConfig.USE_CRAFTY_COUNTRIES && craftyManager.getCraftyCountries().contains(cc)) {
 			LogWriter.println("Creating CRAFTY agent for: " + cc);
 			CraftyCountryAgent cca = new CraftyCountryAgent(demandManager, cc, tradeBarriers);
@@ -79,7 +79,7 @@ public class CountryAgentManager {
 				}
 				else {
 					Map<CropType, Double> subsidyRates = subsidyRateManager.getSubsidyRates(cc);
-		
+					
 					CountryAgent ca = new CountryAgent(demandManager, cc, initCountryLandUse, countryCommodityData, tradeBarriers, yieldClusters, subsidyRates);
 					gamsCountryAgents.add(ca);
 					countryAgents.add(ca);
@@ -133,6 +133,7 @@ public class CountryAgentManager {
 
 	public void recalculateDemandForAll() {
 		for (CountryAgent ca : gamsCountryAgents) {
+			ca.shockGDP();
 			ca.calculateCountryPricesAndDemand(internationalMarket.getWorldPrices());
 		}
 	}
diff --git a/src/ac/ed/lurg/country/GlobalPrice.java b/src/ac/ed/lurg/country/GlobalPrice.java
index 213afeb00caab66ad26fb4db985877b93dbc24f7..dcbaeced3899a1b67c24623f72e28e09548924fb 100644
--- a/src/ac/ed/lurg/country/GlobalPrice.java
+++ b/src/ac/ed/lurg/country/GlobalPrice.java
@@ -55,16 +55,12 @@ public class GlobalPrice {
 		return transportLosses;
 	}
 
-	public GlobalPrice createWithUpdatedMarketPrices(double imports, double exportsBeforeTransportLosses, double transportLosses, boolean adjustPrice, Timestep timestep) {
+	public GlobalPrice createWithUpdatedMarketPrices(double imports, double exportsBeforeTransportLosses, double transportLosses, boolean adjustPrice, Timestep timestep, double production) {
 		double exportsAfterTransportLosses = exportsBeforeTransportLosses - transportLosses;
 		if (imports > 0 || exportsAfterTransportLosses > 0) {
 			double ratio;
 
-			if (imports > exportsAfterTransportLosses)
-				ratio = (imports-exportsAfterTransportLosses)/imports;
-			else
-				ratio = (imports-exportsAfterTransportLosses)/exportsAfterTransportLosses;
-
+			ratio = (imports-exportsAfterTransportLosses)/(imports-exportsAfterTransportLosses+production);
 			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	
diff --git a/src/ac/ed/lurg/demand/AbstractDemandManager.java b/src/ac/ed/lurg/demand/AbstractDemandManager.java
index ce2ce7fd6f87603f2d815c2d484a97a4d05ef85d..18a176741a436eb1da932173c38cce9b1aac7ba3 100644
--- a/src/ac/ed/lurg/demand/AbstractDemandManager.java
+++ b/src/ac/ed/lurg/demand/AbstractDemandManager.java
@@ -61,6 +61,8 @@ public abstract class AbstractDemandManager {
 	}
 
 	protected abstract Map<CommodityType, Double> getFoodDemand(SingleCountry c, int year, Map<CommodityType, Double> prices);
+	
+	public void updateGdpLossesFromShock(CompositeCountry cc, int year, double shockMagnitude) {}
 
 	public double getSecondGenBioenergyDemand(Timestep timestep) {
 		int year = ModelConfig.CHANGE_DEMAND_YEAR ? timestep.getYear() : ModelConfig.BASE_YEAR;
diff --git a/src/ac/ed/lurg/demand/AbstractSSPDemandManager.java b/src/ac/ed/lurg/demand/AbstractSSPDemandManager.java
index 6aadbbeec739d805566cd463f4e698b55ce24e7e..7781a43a54b997f6e36d607e039c42bfbb054f5b 100644
--- a/src/ac/ed/lurg/demand/AbstractSSPDemandManager.java
+++ b/src/ac/ed/lurg/demand/AbstractSSPDemandManager.java
@@ -4,6 +4,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 import ac.ed.lurg.ModelConfig;
+import ac.ed.lurg.country.AgriculturalGDPManager;
+import ac.ed.lurg.country.CompositeCountry;
 import ac.ed.lurg.country.CompositeCountryManager;
 import ac.ed.lurg.country.CountryManager;
 import ac.ed.lurg.country.SingleCountry;
@@ -17,6 +19,7 @@ public abstract class AbstractSSPDemandManager extends AbstractDemandManager {
 	protected BaseConsumpManager baseConsumpManager;
 	protected CalorieManager calorieManager;
 	private SingleCountry usa;
+	private AgriculturalGDPManager agriculturalGDPManager;
 
 	public AbstractSSPDemandManager(String ssp_scenario, BaseConsumpManager baseConsumpManager,CalorieManager calorieManager, CompositeCountryManager compositeCountryManager) {
 		super(compositeCountryManager, calorieManager);
@@ -25,6 +28,23 @@ public abstract class AbstractSSPDemandManager extends AbstractDemandManager {
 		this.calorieManager = calorieManager;
 		sspManager = new SspManager();
 		usa = CountryManager.getForName("United States of America");
+		agriculturalGDPManager = new AgriculturalGDPManager();
+	}
+	
+	@Override
+	public void updateGdpLossesFromShock(CompositeCountry cc, int year, double shockMagnitude) {
+
+		for (SingleCountry c : compositeCountryManager.getAllForCompositeCountry(cc)) {
+			SspData sd = sspManager.get(ssp_scenario, year, c);
+			LogWriter.println("sd data " + sd);
+			if(sd != null) {
+				double gdp = sd.getGdp();
+				double agriculturalGDPProportion = agriculturalGDPManager.getProportion(c);
+				double gdpLost = gdp * agriculturalGDPProportion * shockMagnitude;
+				sd.updateShockedGdpLosses(gdpLost);
+			}
+		}
+
 	}
 
 	@Override
@@ -40,10 +60,10 @@ public abstract class AbstractSSPDemandManager extends AbstractDemandManager {
 		double gdpPcYear;
 		if((ModelConfig.CONSTANT_DIET_HIGH_INCOME & c.getIncomeGroup().toLowerCase().contains("high")) || 
 				(ModelConfig.CONSTANT_DIET_LOW_INCOME & !c.getIncomeGroup().toLowerCase().contains("high")))
-			gdpPcYear = sspManager.get(ssp_scenario, ModelConfig.BASE_YEAR, c).getGdpPc();
+			gdpPcYear = sspManager.get(ssp_scenario, ModelConfig.BASE_YEAR, c).getShockedGdpPc();
 
-		else gdpPcYear= sd.getGdpPc();
-	
+		else gdpPcYear= sd.getShockedGdpPc();
+		
 		SspData usaSd = sspManager.get(ssp_scenario, year, usa);
 		
 		LogWriter.println("Got ssp data for " + c.getCountryName() + " of " + sd);
diff --git a/src/ac/ed/lurg/demand/DemandManagerFromFile.java b/src/ac/ed/lurg/demand/DemandManagerFromFile.java
index 765730b9dfce9139cf3b8e1b7271eb0249b70371..766ea12c09034046b13277188d8072aae2dfbc31 100644
--- a/src/ac/ed/lurg/demand/DemandManagerFromFile.java
+++ b/src/ac/ed/lurg/demand/DemandManagerFromFile.java
@@ -47,5 +47,5 @@ public class DemandManagerFromFile extends AbstractDemandManager {
 			return foodDemandMap;
 		}
 		return dietaryAdjustment(foodDemandMap, year, calorieManager.get(c));
-	}
+	}	
 }
\ No newline at end of file
diff --git a/src/ac/ed/lurg/demand/SspData.java b/src/ac/ed/lurg/demand/SspData.java
index 04f83c5c8caabfb31b7078f15fbbd1bc618e2c01..e400f16fa8872b2005e96029d16a319ec09234ac 100644
--- a/src/ac/ed/lurg/demand/SspData.java
+++ b/src/ac/ed/lurg/demand/SspData.java
@@ -5,11 +5,13 @@ public class SspData {
 	
 	private double population;
 	private double gdp;
+	private double shockedGdp;
 	
 	public SspData(double population, double gdp) {
 		super();
 		this.population = population;
 		this.gdp = gdp;
+		this.shockedGdp = 0.0;
 	}
 	
 	public double getPopulation() {
@@ -18,10 +20,18 @@ public class SspData {
 	public double getGdp() {
 		return gdp;
 	}
-
+	
 	public double getGdpPc() {
 		return gdp/population;
 	}
+	
+	public double getShockedGdpPc() {
+		return (gdp - shockedGdp)/population;
+	}
+	
+	public void updateShockedGdpLosses(double gdpLoss) {
+		shockedGdp = gdpLoss;
+	}
 
 	@Override
 	public String toString() {