diff --git a/src/ac/ed/lurg/country/AbstractCountryAgent.java b/src/ac/ed/lurg/country/AbstractCountryAgent.java
index a0ae581c53119dabc2c8366e4651929c697fd43c..89cb3ded3cc5e46351e094d98ee7a17c2fa3b486 100644
--- a/src/ac/ed/lurg/country/AbstractCountryAgent.java
+++ b/src/ac/ed/lurg/country/AbstractCountryAgent.java
@@ -80,7 +80,7 @@ public abstract class AbstractCountryAgent {
 			else
 				priceMarkupFactor = priceMarkupFactors.get(commodity);
 			
-			prices.put(commodity, commPrice);
+			prices.put(commodity, commPrice * priceMarkupFactor);   // * priceMarkupFactor to rebase prices to those provide by G&G
 			LogWriter.println("Price for " + commodity.getGamsName() + " is " + commPrice * priceMarkupFactor + " after markup of " + priceMarkupFactor);
 		}
 		
diff --git a/src/ac/ed/lurg/country/gams/GamsDemandOutput.java b/src/ac/ed/lurg/country/gams/GamsDemandOutput.java
index 85fe7c454d769fe2580e04f2cb127745e655853f..9fb461082b8bf15a80a68c1d11e450fedb4ff661 100644
--- a/src/ac/ed/lurg/country/gams/GamsDemandOutput.java
+++ b/src/ac/ed/lurg/country/gams/GamsDemandOutput.java
@@ -41,4 +41,8 @@ public class GamsDemandOutput {
 	public String getStatus() {
 		return status;
 	}
+
+	public void resetForNewAttempt() {
+		utility = (Math.random()-0.5) * 40;
+	}
 }
diff --git a/src/ac/ed/lurg/demand/ElasticDemandManager.java b/src/ac/ed/lurg/demand/ElasticDemandManager.java
index 3b523c30fd41b2b6a359ec94adf5c115f5355fb8..ad27844b64510758e7deb71f3b461c6dcb0f39c6 100644
--- a/src/ac/ed/lurg/demand/ElasticDemandManager.java
+++ b/src/ac/ed/lurg/demand/ElasticDemandManager.java
@@ -41,7 +41,18 @@ public class ElasticDemandManager extends AbstractSSPDemandManager {
 		GamsDemandInput inputData = new GamsDemandInput(c, year, gdpPc, prices, usaGdpPc, previousGamsDemands.get(c));
 
 		// Do the projection
-		GamsDemandOutput gamsOutput = new GamsDemandOptimiser(inputData).getDemandPc();
+		GamsDemandOutput gamsOutput = null;
+		for (int i = 1; i < 50; ++i) {
+			gamsOutput = new GamsDemandOptimiser(inputData).getDemandPc();
+			if (gamsOutput.getStatus().equals("SOLVED"))
+				break;
+			else {
+				LogWriter.printlnError(i + ": Problem solving " + c + ", " + year + " got " + gamsOutput.getStatus());
+				gamsOutput.resetForNewAttempt();
+				inputData = new GamsDemandInput(c, year, gdpPc, prices, usaGdpPc, gamsOutput);
+			}
+		}
+		
 		previousGamsDemands.put(c, gamsOutput);
 		Map<CommodityType, Double> foodPc = gamsOutput.getPlumDemands();