diff --git a/src/ac/ed/lurg/country/CountryAgent.java b/src/ac/ed/lurg/country/CountryAgent.java
index 728939e7932c883a2f8e1574f48f203fe26cfb88..75c4dfd53261f7c4c9117813de1edd11dd802155 100644
--- a/src/ac/ed/lurg/country/CountryAgent.java
+++ b/src/ac/ed/lurg/country/CountryAgent.java
@@ -175,22 +175,25 @@ public class CountryAgent extends AbstractCountryAgent {
 				changeUp = changeDown = 0;
 			} else {
 				changeDown = changeUp = maxOfProdOrSupply * ModelConfig.MAX_IMPORT_CHANGE;
-			}
 
-			if (crop.isImportedCrop()) {
-				// Guide export level towards import level
-				if (baseTrade < 0) {
-					double ratio = currentWorldPrices.get(crop).getExportAdjustment(crop.getStockToUseRatio());
-					baseTrade *= ratio;
-					cropUsage.updateNetImports(cropUsage.getNetImportsExpected() * ratio);
-				}
-
-				// If stock about to go negative temporarily increase import price
-				if (currentWorldPrices.get(crop).isStockCritical()) {
-					currentCountryPrices.get(crop).adjustImportPrice(2.0);
+				if (crop.isImportedCrop()) {
+					// Guide export level towards import level
+					if (baseTrade < 0) {
+						if (crop.equals(CropType.RUMINANTS)) {
+							int foo = 1;
+						}
+						double ratio = currentWorldPrices.get(crop).getExportAdjustment(crop.getStockToUseRatio());
+						baseTrade *= ratio;
+						cropUsage.updateNetImports(cropUsage.getNetImportsExpected() * ratio);
+					}
+
+					// If stock about to go negative temporarily increase import price
+					if (currentWorldPrices.get(crop).isStockCritical()) {
+						currentCountryPrices.get(crop).adjustImportPrice(2.0);
+					}
 				}
 			}
-			
+
 			if (CropType.ENERGY_CROPS.equals(crop) && baseTrade == 0) { // could apply this logic for all crops?
 				changeDown = changeUp = ModelConfig.MAX_IMPORT_CHANGE * currentGen2EcDemand;
 			}
@@ -227,18 +230,18 @@ public class CountryAgent extends AbstractCountryAgent {
 			} else {
 				double maxOfProdOrSupply = Math.max(carbonUsageData.getCarbonCredits() + Math.max(baseTrade, 0), 1);
 				changeUp = changeDown = maxOfProdOrSupply * ModelConfig.MAX_IMPORT_CHANGE;
-			}
 
-			// Guide export level towards import level
-			if (baseTrade < 0) {
-				double ratio = globalCarbonPrice.getExportAdjustment(ModelConfig.DEFAULT_STOCK_USE_RATIO);
-				baseTrade *= ratio;
-				carbonUsageData.updateNetImports(carbonUsageData.getNetCarbonImport() * ratio);
-			}
+				// Guide export level towards import level
+				if (baseTrade < 0) {
+					double ratio = globalCarbonPrice.getExportAdjustment(ModelConfig.DEFAULT_STOCK_USE_RATIO);
+					baseTrade *= ratio;
+					carbonUsageData.updateNetImports(carbonUsageData.getNetCarbonImport() * ratio);
+				}
 
-			// If stock about to go negative temporarily increase import price
-			if (globalCarbonPrice.isStockCritical()) {
-				currentCarbonPrice.adjustImportPrice(2.0);
+				// If stock about to go negative temporarily increase import price
+				if (globalCarbonPrice.isStockCritical()) {
+					currentCarbonPrice.adjustImportPrice(2.0);
+				}
 			}
 
 			carbonTradeConstraint = new TradeConstraint(baseTrade - changeDown, baseTrade + changeUp);
@@ -269,18 +272,18 @@ public class CountryAgent extends AbstractCountryAgent {
 				changeUp = changeDown = 0.0;
 			} else {
 				changeUp = changeDown = maxOfProdOrSupply * ModelConfig.MAX_IMPORT_CHANGE;
-			}
 
-			// Guide export level towards import level
-			if (baseTrade < 0) {
-				double ratio = globalWoodPrices.get(woodType).getExportAdjustment(ModelConfig.DEFAULT_STOCK_USE_RATIO);
-				baseTrade *= ratio;
-				woodUsageData.get(woodType).updateNetImports(woodUsageData.get(woodType).getNetImport() * ratio);
-			}
+				// Guide export level towards import level
+				if (baseTrade < 0) {
+					double ratio = globalWoodPrices.get(woodType).getExportAdjustment(ModelConfig.DEFAULT_STOCK_USE_RATIO);
+					baseTrade *= ratio;
+					woodUsageData.get(woodType).updateNetImports(woodUsageData.get(woodType).getNetImport() * ratio);
+				}
 
-			// If stock about to go negative temporarily increase import price
-			if (globalWoodPrices.get(woodType).isStockCritical()) {
-				currentWoodPrices.get(woodType).adjustImportPrice(2.0);
+				// If stock about to go negative temporarily increase import price
+				if (globalWoodPrices.get(woodType).isStockCritical()) {
+					currentWoodPrices.get(woodType).adjustImportPrice(2.0);
+				}
 			}
 
 			woodTradeConstraints.put(woodType, new TradeConstraint(baseTrade - changeDown, baseTrade + changeUp));
diff --git a/src/ac/ed/lurg/country/GlobalPrice.java b/src/ac/ed/lurg/country/GlobalPrice.java
index 84256e7c5ead43aa42eaa86b1afcfe4a2fc5b674..6c47365e69530f5a1181769d0a2a8a26257a64b1 100644
--- a/src/ac/ed/lurg/country/GlobalPrice.java
+++ b/src/ac/ed/lurg/country/GlobalPrice.java
@@ -176,9 +176,13 @@ public class GlobalPrice implements Serializable {
 	}
 
 	public double getExportAdjustment(double targetStockUseRatio) {
-		double surplus = stockLevel - (stockLevel / stockUseRatio) * targetStockUseRatio;
-		double ratio = importAmount / (ModelConfig.EXPORT_ADJUSTMENT_RATE * exportAmountBeforeLoss
-				+ ModelConfig.STOCK_ADJUSTMENT_RATE * surplus);
+		double targetStockLevel = (stockLevel / stockUseRatio) * targetStockUseRatio;
+		double surplus = stockLevel - targetStockLevel;
+		double targetExport = exportAmountBeforeLoss
+				- ModelConfig.EXPORT_ADJUSTMENT_RATE * (exportAmountBeforeLoss - importAmount)
+				- ModelConfig.STOCK_ADJUSTMENT_RATE * surplus;
+		targetExport = Math.max(targetExport, 0); // can't be negative
+		double ratio = exportAmountBeforeLoss > 0 ? targetExport / exportAmountBeforeLoss : 1;
 		return ratio;
 	}