diff --git a/GAMS/IntExtOpt.gms b/GAMS/IntExtOpt.gms
index 125271f92f82364b75103265a232214980354751..c02f4ed56996eea1ee960107bd7ae680bc4d2302 100644
--- a/GAMS/IntExtOpt.gms
+++ b/GAMS/IntExtOpt.gms
@@ -34,6 +34,7 @@
  PARAMETER irrigConstraint(location)         max water available for irrigation in litre per m2;
  PARAMETER minDemandPerCereal(cereal_crop)   min demand for each cereal crop as factor of all cereals;
  PARAMETER seedAndWasteRate(all_types)       rate of use for seed and waste combined;
+ PARAMETER subsidyRate(crop)                 rates of subsidy compared to costs;
  
  PARAMETER agriExpansionCost(location)       price for increase agricultural area varies based on amount of managed or unmanaged forest;
  SCALAR pastureIncCost                       price for increasing pasture area;
@@ -56,7 +57,7 @@ $gdxin %gdxincname%
 $load location, suitableLandArea, demand, agriExpansionCost, cropIncCost, pastureIncCost, cropDecCost, pastureDecCost
 $load previousArea, previousFertIntensity, previousIrrigIntensity, previousOtherIntensity, previousRuminantFeed, previousMonogastricFeed, previousImportAmount, previousExportAmount
 $load yieldNone, yieldFertOnly, yieldIrrigOnly, yieldBoth
-$load fertParam, irrigParam, otherIParam, exportPrices, importPrices, maxNetImport, minNetImport, unhandledCropRate, setAsideRate, maxLandExpansionRate
+$load fertParam, irrigParam, otherIParam, exportPrices, importPrices, maxNetImport, minNetImport, unhandledCropRate, setAsideRate, maxLandExpansionRate, subsidyRate
 $load meatEfficency, otherICost, irrigCost, irrigMaxRate, irrigConstraint, fertiliserUnitCost, domesticPriceMarkup, minDemandPerCereal, seedAndWasteRate, animalFeedFromOtherSources
 $gdxin    
  
@@ -203,7 +204,7 @@ $gdxin
 
  COST_EQ .. total_cost =E= 
          ( 
-              (   SUM((crop, location), area(crop, location) * unitCost(crop, location)) +
+              (   SUM((crop, location), area(crop, location) * unitCost(crop, location) * (1-subsidyRate(crop))) +
                   
                   SUM(location, 
                      agriExpansionCost(location) * agriLandExpansion(location) +
diff --git a/GAMS/LUOpt.gms b/GAMS/LUOpt.gms
index 16279db01eb3f7af9c84f3a5dc0a476baa63e020..ad18803980df09b8edd4e06cdefacd95f0a087be 100644
--- a/GAMS/LUOpt.gms
+++ b/GAMS/LUOpt.gms
@@ -35,6 +35,7 @@
  PARAMETER irrigConstraint(location)         max water available for irrigation in litre per m2;
  PARAMETER minDemandPerCereal(cereal_crop)   min demand for each cereal crop as factor of all cereals;
  PARAMETER seedAndWasteRate(all_types)       rate of use for seed and waste combined;
+ PARAMETER subsidyRate(crop)                 rates of subsidy compared to costs;
  
  PARAMETER agriExpansionCost(location)       price for increase agricultural area varies based on amount of managed or unmanaged forest;
  SCALAR pastureIncCost                       price for increasing pasture area;
@@ -57,7 +58,7 @@ $gdxin %gdxincname%
 $load location, suitableLandArea, demand, agriExpansionCost, cropIncCost, pastureIncCost, cropDecCost, pastureDecCost
 $load previousArea, previousFertIntensity, previousIrrigIntensity, previousOtherIntensity, previousRuminantFeed, previousMonogastricFeed, previousImportAmount
 $load yieldNone, yieldFertOnly, yieldIrrigOnly, yieldBoth
-$load fertParam, irrigParam, otherIParam, exportPrices, importPrices, maxProduction, minProduction, unhandledCropRate, setAsideRate, maxLandExpansionRate
+$load fertParam, irrigParam, otherIParam, exportPrices, importPrices, maxProduction, minProduction, unhandledCropRate, setAsideRate, maxLandExpansionRate, subsidyRate
 $load meatEfficency, otherICost, irrigCost, irrigMaxRate, irrigConstraint, fertiliserUnitCost, domesticPriceMarkup, minDemandPerCereal, seedAndWasteRate, animalFeedFromOtherSources
 
 $gdxin    
@@ -212,7 +213,7 @@ $gdxin
          ( 
               SUM(traded_commodity, domesticallyMetDemand(traded_commodity) * importPrices(traded_commodity) + export(traded_commodity) * exportPrices(traded_commodity)) - 
               
-              (   SUM((crop, location), area(crop, location) * unitCost(crop, location)) +
+              (   SUM((crop, location), area(crop, location) * unitCost(crop, location) * (1-subsidyRate(crop))) +
                   
                   SUM(location, 
                      agriExpansionCost(location) * agriLandExpansion(location) +
diff --git a/data/subsidyrates.csv b/data/subsidyrates.csv
new file mode 100644
index 0000000000000000000000000000000000000000..40012d0a9c9b2792f273f57c4c54e298a8b914bd
--- /dev/null
+++ b/data/subsidyrates.csv
@@ -0,0 +1 @@
+country,crop,rate
diff --git a/src/ac/ed/lurg/InternationalMarket.java b/src/ac/ed/lurg/InternationalMarket.java
index 3af04072de454265adeafe9a3acdc9658199728c..cd7b9b11bc5be9374446674071a27d21947d5f42 100644
--- a/src/ac/ed/lurg/InternationalMarket.java
+++ b/src/ac/ed/lurg/InternationalMarket.java
@@ -25,16 +25,15 @@ public class InternationalMarket {
 		// import/export specified amount, values based on
 		// http://www.indexmundi.com/commodities/ for Jun 2010
 		worldPrices = new HashMap<CropType, GlobalPrice>();
-		worldPrices.put(CropType.WHEAT, GlobalPrice.createInitial(0.12 * ModelConfig.INITIAL_PRICE_SHIFT));
-		worldPrices.put(CropType.MAIZE, GlobalPrice.createInitial(0.09 * ModelConfig.INITIAL_PRICE_SHIFT));
-		worldPrices.put(CropType.RICE, GlobalPrice.createInitial(0.17 * ModelConfig.INITIAL_PRICE_SHIFT));
-		worldPrices.put(CropType.OILCROPS, GlobalPrice.createInitial(0.16 * ModelConfig.INITIAL_PRICE_SHIFT));
-
-		worldPrices.put(CropType.PULSES, GlobalPrice.createInitial(0.12 * ModelConfig.INITIAL_PRICE_SHIFT));
-		worldPrices.put(CropType.STARCHY_ROOTS, GlobalPrice.createInitial(0.05 * ModelConfig.INITIAL_PRICE_SHIFT));
-		worldPrices.put(CropType.MONOGASTRICS, GlobalPrice.createInitial(0.11 * ModelConfig.INITIAL_PRICE_SHIFT)); // quantities is in feed equivalent term (0.4 is weighted average price per feed, and 0.5 accounts for mark-up for additional processing)
-		worldPrices.put(CropType.RUMINANTS, GlobalPrice.createInitial(0.06 * ModelConfig.INITIAL_PRICE_SHIFT)); // quantities is in feed equivalent term
-		worldPrices.put(CropType.ENERGY_CROPS, GlobalPrice.createInitial(0.04 * ModelConfig.INITIAL_PRICE_SHIFT));
+		worldPrices.put(CropType.WHEAT, GlobalPrice.createInitial(ModelConfig.INITAL_PRICE_WHEAT));
+		worldPrices.put(CropType.MAIZE, GlobalPrice.createInitial(ModelConfig.INITAL_PRICE_MAIZE));
+		worldPrices.put(CropType.RICE, GlobalPrice.createInitial(ModelConfig.INITAL_PRICE_RICE));
+		worldPrices.put(CropType.OILCROPS, GlobalPrice.createInitial(ModelConfig.INITAL_PRICE_OILCROPS));
+		worldPrices.put(CropType.PULSES, GlobalPrice.createInitial(ModelConfig.INITAL_PRICE_PULSES));
+		worldPrices.put(CropType.STARCHY_ROOTS, GlobalPrice.createInitial(ModelConfig.INITAL_PRICE_STARCHYROOTS));
+		worldPrices.put(CropType.MONOGASTRICS, GlobalPrice.createInitial(ModelConfig.INITAL_PRICE_MONOGASTRICS)); // quantities is in feed equivalent term (0.4 is weighted average price per feed, and 0.5 accounts for mark-up for additional processing)
+		worldPrices.put(CropType.RUMINANTS, GlobalPrice.createInitial(ModelConfig.INITAL_PRICE_RUMINANTS)); // quantities is in feed equivalent term
+		worldPrices.put(CropType.ENERGY_CROPS, GlobalPrice.createInitial(ModelConfig.INITAL_PRICE_ENERGYCROPS));
 		stockLevel = getInitialStockLevels();
 	}
 	
diff --git a/src/ac/ed/lurg/ModelConfig.java b/src/ac/ed/lurg/ModelConfig.java
index bfe6f6d57c5bff45aa0ec7e1e7a429d02720b23b..a69e23a391d4ba087b518975e15f7ade1ffc878c 100644
--- a/src/ac/ed/lurg/ModelConfig.java
+++ b/src/ac/ed/lurg/ModelConfig.java
@@ -166,6 +166,8 @@ public class ModelConfig {
 	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";
+	public static final String SUBSIDY_RATE_FILENAME = getProperty("SUBSIDY_RATE_FILENAME", "subsidyrates.csv");
+	public static final String SUBSIDY_RATE_FILE = getProperty("SUBSIDY_RATE_FILE", DATA_DIR + File.separator + SUBSIDY_RATE_FILENAME);
 
 	// yield data
 	public static final String YIELD_DIR_BASE = getProperty("YIELD_DIR_BASE");
@@ -186,6 +188,18 @@ public class ModelConfig {
 	
 	public static final double CALIB_FACTOR_SRC = getDoubleProperty("CALIB_FACTOR_SRC", Double.NaN);
 
+	public static final double INITIAL_PRICE_SHIFT = getDoubleProperty("INITIAL_PRICE_SHIFT", 1.0);
+	public static final double INITAL_PRICE_WHEAT = getDoubleProperty("INITAL_PRICE_WHEAT", 0.157 * ModelConfig.INITIAL_PRICE_SHIFT);
+	public static final double INITAL_PRICE_MAIZE = getDoubleProperty("INITAL_PRICE_MAIZE", 0.152 * ModelConfig.INITIAL_PRICE_SHIFT);
+	public static final double INITAL_PRICE_RICE = getDoubleProperty("INITAL_PRICE_RICE", 0.182 * ModelConfig.INITIAL_PRICE_SHIFT);
+	public static final double INITAL_PRICE_OILCROPS = getDoubleProperty("INITAL_PRICE_OILCROPS", (0.820 * .4 + 0.314 * .6) * 0.3 * ModelConfig.INITIAL_PRICE_SHIFT);
+	public static final double INITAL_PRICE_PULSES = getDoubleProperty("INITAL_PRICE_PULSES", 0.4 * ModelConfig.INITIAL_PRICE_SHIFT);
+	public static final double INITAL_PRICE_STARCHYROOTS = getDoubleProperty("INITAL_PRICE_STARCHYROOTS", 0.1 * ModelConfig.INITIAL_PRICE_SHIFT);
+	public static final double INITAL_PRICE_MONOGASTRICS = getDoubleProperty("INITAL_PRICE_MONOGASTRICS", 0.4 * 0.5 * ModelConfig.INITIAL_PRICE_SHIFT); // quantities is in feed equivalent term (0.4 is weighted average price per feed, and 0.5 accounts for mark-up for additional processing)
+	public static final double INITAL_PRICE_RUMINANTS = getDoubleProperty("INITAL_PRICE_RUMINANTS", 0.1 * 0.6 * ModelConfig.INITIAL_PRICE_SHIFT); // quantities is in feed equivalent term
+	public static final double INITAL_PRICE_ENERGYCROPS = getDoubleProperty("INITAL_PRICE_ENERGYCROPS", 0.04 * ModelConfig.INITIAL_PRICE_SHIFT);
+
+	
 	// Spatial (gridded) data
 	public static final double CELL_SIZE_X = getDoubleProperty("CELL_SIZE_X", 0.5);
 	public static final double CELL_SIZE_Y = getDoubleProperty("CELL_SIZE_Y", CELL_SIZE_X);
@@ -217,7 +231,6 @@ public class ModelConfig {
 	public static final boolean IS_CALIBRATION_RUN = getBooleanProperty("IS_CALIBRATION_RUN", false);
 	public static final String SERIALIZED_LAND_USE_FILE = getProperty("SERIALIZED_LAND_USE_FILE", OUTPUT_DIR + File.separator + "landUseRaster.ser");
 	public static final boolean MARKET_ADJ_PRICE = IS_CALIBRATION_RUN ? false : getBooleanProperty("MARKET_ADJ_PRICE", true);
-	public static final double INITIAL_PRICE_SHIFT = getDoubleProperty("INITIAL_PRICE_SHIFT", 1.0);
 	public static final boolean CHANGE_YIELD_DATA_YEAR = IS_CALIBRATION_RUN ? false : getBooleanProperty("CHANGE_YIELD_DATA_YEAR", true);
 	public static final String CLUSTERED_YIELD_FILE = getProperty("CLUSTERED_YIELD_FILE", OUTPUT_DIR + File.separator + "cluster.asc");
 	public static final boolean GENERATE_NEW_YIELD_CLUSTERS = getBooleanProperty("GENERATE_NEW_YIELD_CLUSTERS", IS_CALIBRATION_RUN);
diff --git a/src/ac/ed/lurg/ModelMain.java b/src/ac/ed/lurg/ModelMain.java
index 60423a039edf62c7ea4751fea34c147e01fdc16b..72a82e06f548c0e7a9468785bd0939adaa3626be 100644
--- a/src/ac/ed/lurg/ModelMain.java
+++ b/src/ac/ed/lurg/ModelMain.java
@@ -23,6 +23,7 @@ import ac.ed.lurg.country.CountryBoundaryRaster;
 import ac.ed.lurg.country.CountryBoundaryReader;
 import ac.ed.lurg.country.CountryPrice;
 import ac.ed.lurg.country.GlobalPrice;
+import ac.ed.lurg.country.SubsidyRateManager;
 import ac.ed.lurg.country.TradeManager;
 import ac.ed.lurg.demand.AbstractDemandManager;
 import ac.ed.lurg.demand.BaseConsumpManager;
@@ -44,8 +45,8 @@ import ac.ed.lurg.landuse.ProtectedAreasReader;
 import ac.ed.lurg.landuse.RunOffReader;
 import ac.ed.lurg.output.LandUseOutputer;
 import ac.ed.lurg.output.LpjgOutputer;
-import ac.ed.lurg.shock.YieldShocks;
 import ac.ed.lurg.shock.YieldShockReader;
+import ac.ed.lurg.shock.YieldShocks;
 import ac.ed.lurg.types.CommodityType;
 import ac.ed.lurg.types.CropType;
 import ac.ed.lurg.types.LandCoverType;
@@ -66,6 +67,7 @@ public class ModelMain {
 	private Collection<CountryAgent> countryAgents;
 	private CountryBoundaryRaster countryBoundaryRaster;
 	private AbstractDemandManager demandManager;
+	private SubsidyRateManager subsidyRateManager;
 	private TradeManager tradeManager;
 	private CompositeCountryManager compositeCountryManager;
 	private RasterHeaderDetails desiredProjection;
@@ -88,7 +90,8 @@ public class ModelMain {
 
 		BaseConsumpManager baseConsumpManager = new BaseConsumpManager();
 		compositeCountryManager = new CompositeCountryManager(baseConsumpManager);
-
+		subsidyRateManager = new SubsidyRateManager(compositeCountryManager);
+		
 		if (ModelConfig.DEMAND_FROM_FILE)
 			demandManager = new DemandManagerFromFile(compositeCountryManager);
 		else
@@ -487,8 +490,10 @@ private void writeDomesticProductionFile(Timestep timestep) {
 					LogWriter.printlnError("No initial land use for " + cc + ", so skipping");
 					continue;
 				}
+				
+				Map<CropType, Double> subsidyRates = subsidyRateManager.getSubsidyRates(cc);
 
-				CountryAgent ca = new CountryAgent(demandManager, cc, initCountryLandUse, countryCommodityData, countryTradeBarriers, yieldClusters);
+				CountryAgent ca = new CountryAgent(demandManager, cc, initCountryLandUse, countryCommodityData, countryTradeBarriers, yieldClusters, subsidyRates);
 				countryAgents.add(ca);
 				LogWriter.println("Creating country agent for: " + cc);
 			}
diff --git a/src/ac/ed/lurg/country/CountryAgent.java b/src/ac/ed/lurg/country/CountryAgent.java
index 7319b107be0c2e3e346b2d5a3f7399c2cc7deebe..142c5eb1f4c387d7e20e590ec03b13dd0305f8ac 100644
--- a/src/ac/ed/lurg/country/CountryAgent.java
+++ b/src/ac/ed/lurg/country/CountryAgent.java
@@ -42,14 +42,17 @@ public class CountryAgent {
 	private Map<CropType, Double> tradeBarriers;
 	private RasterSet<IntegerRasterItem> yieldClusters;
 	private double animalFeedFromOtherSources;
+	private Map<CropType, Double> subsidyRates;
 
 	public CountryAgent(AbstractDemandManager demandManager,CompositeCountry country, RasterSet<LandUseItem> cropAreaRaster,
-			Map<CropType, CropUsageData> cropUsageData, Map<CropType, Double> tradeBarriers, RasterSet<IntegerRasterItem> yieldClusters) {
+			Map<CropType, CropUsageData> cropUsageData, Map<CropType, Double> tradeBarriers, RasterSet<IntegerRasterItem> yieldClusters,
+			Map<CropType, Double> subsidyRates) {
 
 		this.demandManager = demandManager;
 		this.country = country;
 		this.tradeBarriers = tradeBarriers;
 		this.yieldClusters = yieldClusters;
+		this.subsidyRates = subsidyRates;
 
 		GamsRasterOutput initialData = new GamsRasterOutput(cropAreaRaster, cropUsageData);
 		previousGamsRasterOutput = initialData;
@@ -266,7 +269,7 @@ public class CountryAgent {
 		Map<CropType, Double> minCerealFract = getMinCerealFraction(currentTimestep);
 
 		GamsCountryInput countryLevelInputs = new GamsCountryInput(country, currentProjectedDemand, currentCountryPrices, importConstraints, 
-				previousGamsRasterOutput.getCropUsageData(), minCerealFract, animalFeedFromOtherSources);	
+				previousGamsRasterOutput.getCropUsageData(), minCerealFract, animalFeedFromOtherSources, subsidyRates);	
 		GamsRasterInput input = new GamsRasterInput(currentTimestep, countryYieldSurfaces, previousGamsRasterOutput.getLandUses(), irrigData, countryLevelInputs);
 
 		return input;
diff --git a/src/ac/ed/lurg/country/SubsidyRateManager.java b/src/ac/ed/lurg/country/SubsidyRateManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..2b30a346e26c8c4f3e9e886b481ca059bba18675
--- /dev/null
+++ b/src/ac/ed/lurg/country/SubsidyRateManager.java
@@ -0,0 +1,66 @@
+package ac.ed.lurg.country;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import ac.ed.lurg.ModelConfig;
+import ac.ed.lurg.types.CropType;
+import ac.ed.lurg.utils.LogWriter;
+import ac.ed.lurg.utils.StringTabularReader;
+
+public class SubsidyRateManager {
+	protected CompositeCountryManager compositeCountryManager;
+	private StringTabularReader tabularReader;
+
+	public SubsidyRateManager(CompositeCountryManager compositeCountryManager) {
+		this.compositeCountryManager = compositeCountryManager;
+		tabularReader = new StringTabularReader(",", new String[]{"country", "crop", "rate"});
+		tabularReader.read(ModelConfig.SUBSIDY_RATE_FILE);
+	}
+
+	public Map<CropType, Double> getSubsidyRates(CompositeCountry cc) {
+
+		Map<CropType, Double> subsidyRates = new HashMap<CropType, Double>();
+		for (SingleCountry c : compositeCountryManager.getAllForCompositeCountry(cc)) {
+			Map<CropType, Double> singleCMap = getSubsidyRates(c);
+
+			for (CropType crop : CropType.getAllItems()) {
+				Double newRateD = singleCMap.get(crop);
+				Double prevRateD = subsidyRates.get(crop);
+
+				// just takes max which isn't right. Should instead weight by production or something else
+				double newRate = Math.max(getDoubleOrZero(newRateD), getDoubleOrZero(prevRateD));
+				subsidyRates.put(crop, newRate);
+			}
+		}
+		return subsidyRates;
+	}
+
+	private double getDoubleOrZero(Double d) {
+		return (d==null ? 0.0 : d.doubleValue());
+	}
+
+	private Map<CropType, Double> getSubsidyRates(SingleCountry c) {
+		Map<CropType, Double> rates = new HashMap<CropType, Double>();
+
+		for (CropType crop : CropType.getAllItems()) {
+			Map<String, String> queryMap = new HashMap<String, String>();
+			queryMap.put("country", c.getCountryName());
+			queryMap.put("crop", crop.getGamsName());
+			try {
+				double subsidy = 0 ;
+				List<Map<String, String>> rows = tabularReader.query(queryMap);
+				if (rows.size() == 1) {
+					String subsidyS = rows.get(0).get("rate");
+					subsidy = Double.valueOf(subsidyS);
+				}
+				rates.put(crop, subsidy);
+			}
+			catch (Exception e) {
+					LogWriter.println("Problem finding cereal demand: " + crop.getFaoName() + ", " + c.getCountryName());
+			}
+		}
+		return rates;
+	}
+}
diff --git a/src/ac/ed/lurg/country/gams/GamsCountryInput.java b/src/ac/ed/lurg/country/gams/GamsCountryInput.java
index 9e244d8ccd872485850b52e73ce6803633cc76c6..f53bfa144479965c57083b730dd84508a1c23bff 100644
--- a/src/ac/ed/lurg/country/gams/GamsCountryInput.java
+++ b/src/ac/ed/lurg/country/gams/GamsCountryInput.java
@@ -20,10 +20,11 @@ public class GamsCountryInput {
 	private Map<CropType, CropUsageData> previousCropUsageData;
 	private Map<CropType, Double> minCerealFraction;
 	private double animalFeedFromOtherSources;
+	private Map<CropType, Double> subsidyRates;
 
 	public GamsCountryInput(CompositeCountry country, Map<CommodityType, Double> projectedDemand, Map<CropType, CountryPrice> countryPrices, 
 			Map<CropType, TradeOrProductionConstraint> importConstraints, Map<CropType, CropUsageData> previousCropUsageData, Map<CropType, Double> minCerealFraction,
-			double animalFeedFromOtherSources) {
+			double animalFeedFromOtherSources, Map<CropType, Double> subsidyRates) {
 		super();
 		this.country = country;
 		this.projectedDemand = projectedDemand;
@@ -32,6 +33,7 @@ public class GamsCountryInput {
 		this.previousCropUsageData = previousCropUsageData;
 		this.minCerealFraction = minCerealFraction;
 		this.animalFeedFromOtherSources = animalFeedFromOtherSources;
+		this.subsidyRates = subsidyRates;
 	}
 		
 	public CompositeCountry getCountry() { 
@@ -83,4 +85,8 @@ public class GamsCountryInput {
 	public double getAnimalFeedFromOtherSources() {
 		return animalFeedFromOtherSources;
 	}
+	
+	public Map<CropType, Double> getSubsidyRates() {
+		return subsidyRates;
+	}
 }
\ No newline at end of file
diff --git a/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java b/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java
index 9ca887d272a1fd5b6194f9bb9f5360a8fe5e318a..a90988a3114568dee21a784f256072c496525eda 100644
--- a/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java
+++ b/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java
@@ -236,6 +236,14 @@ public class GamsLocationOptimiser {
 			}
 		}
 
+		if (DEBUG) LogWriter.println("\nCrop, subsidy rate");
+		GAMSParameter subsideRateP = inDB.addParameter("subsidyRate", 1);
+		for (CropType crop : CropType.getNonMeatTypes()) {
+			double subsidyRate = countryInput.getSubsidyRates().get(crop);
+			if (DEBUG) LogWriter.println(String.format("%15s,\t %.4f", crop.getGamsName(), subsidyRate));
+			setGamsParamValue(subsideRateP.addRecord(crop.getGamsName()), subsidyRate, 4);
+		}
+		
 		if (DEBUG) LogWriter.println("\nImport-export, min trade/prod, max trade/prod, global import price, global export price, imports,   exports, ruminantFeed, monogastricFeed, seedAndWasteRate");
 		
 		GAMSParameter minTradeOrProdP = null;
diff --git a/src/ac/ed/lurg/demand/DemandCurve.java b/src/ac/ed/lurg/demand/DemandCurve.java
index 7593ff9a55665ba252b5dc374615724d35c53d04..aa1d5ee64aaa3497688a40f72f54db11cf6f8fc6 100644
--- a/src/ac/ed/lurg/demand/DemandCurve.java
+++ b/src/ac/ed/lurg/demand/DemandCurve.java
@@ -3,7 +3,6 @@ package ac.ed.lurg.demand;
 import ac.ed.lurg.ModelConfig;
 import ac.ed.lurg.types.CommodityType;
 import ac.ed.lurg.types.ModelFitType;
-import ac.ed.lurg.utils.LogWriter;
 
 
 public class DemandCurve {